首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将JSON数据发布到ASP.NET MVC

将JSON数据发布到ASP.NET MVC
EN

Stack Overflow用户
提问于 2010-11-12 19:25:58
回答 9查看 152K关注 0票数 60

我正在尝试使用JSON将行项目列表获取到网页中,然后通过ajax请求使用到达的相同JSON结构将其操作并发送回服务器(除非字段值已更改)。

从服务器接收数据很容易,操作起来更简单!但是将JSON数据发送回服务器进行保存...自杀时间到了!快来人帮帮忙!

Javascript

代码语言:javascript
复制
var lineitems;

// get data from server
$.ajax({
    url: '/Controller/GetData/',
    success: function(data){
        lineitems = data;
    }
});

// post data to server
$.ajax({
    url: '/Controller/SaveData/',
    data: { incoming: lineitems }
});

C# - Objects

代码语言:javascript
复制
public class LineItem{
    public string reference;
    public int quantity;
    public decimal amount;
}

C# -控制器

代码语言:javascript
复制
public JsonResult GetData()
{
    IEnumerable<LineItem> lineItems = ... ; // a whole bunch of line items
    return Json(lineItems);
}

public JsonResult SaveData(IEnumerable<LineItem> incoming){
    foreach(LineItem item in incoming){
        // save some stuff
    }
    return Json(new { success = true, message = "Some message" });
}

数据作为序列化的post数据到达服务器。自动化的模型绑定器试图绑定IEnumerable<LineItem> incoming,令人惊讶的是,结果得到的IEnumerable具有正确的LineItems数量-它只是没有用数据填充它们。

解决方案

使用来自许多来源的答案,主要是另一个stackoverflow帖子上的djch和下面的BeRecursive,我使用两个主要方法解决了我的问题。

服务器端

下面的反序列化程序需要引用System.Runtime.Serializationusing System.Runtime.Serialization.Json

代码语言:javascript
复制
private T Deserialise<T>(string json)
{
    using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
    {
        var serialiser = new DataContractJsonSerializer(typeof(T));
        return (T)serialiser.ReadObject(ms);
    }
}

public void Action(int id, string items){
    IEnumerable<LineItem> lineitems = Deserialise<IEnumerable<LineItem>>(items);
    // do whatever needs to be done - create, update, delete etc.
}

客户端

它使用了json.org的stringify方法,可以在这个依赖的https://github.com/douglascrockford/JSON-js/blob/master/json2.js中找到(缩小后是2.5kb )

代码语言:javascript
复制
$.ajax({
    type: 'POST',
    url: '/Controller/Action',
    data: { 'items': JSON.stringify(lineItems), 'id': documentId }
});
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4164114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档