Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的字符串化JSON更改没有提交给我的控制器?_C#_Jquery_Asp.net Mvc 4_Model_Model Binding - Fatal编程技术网

C# 为什么我的字符串化JSON更改没有提交给我的控制器?

C# 为什么我的字符串化JSON更改没有提交给我的控制器?,c#,jquery,asp.net-mvc-4,model,model-binding,C#,Jquery,Asp.net Mvc 4,Model,Model Binding,我有一个模型,我发送到我的视图。因为这个模型中有几个复杂的对象,所以我使用var model=将模型作为全局变量公开给所有jQuery方法 编辑完模型(创建新项目、更新现有项目以及将对象从一个地方更改到另一个地方)后,我使用以下代码将其发布到控制器: $("#Update").click(function () { $.ajax({ url: '<%= Url.Action("Update", "Editor") %>', ty

我有一个模型,我发送到我的视图。因为这个模型中有几个复杂的对象,所以我使用
var model=
将模型作为全局变量公开给所有jQuery方法

编辑完模型(创建新项目、更新现有项目以及将对象从一个地方更改到另一个地方)后,我使用以下代码将其发布到控制器:

$("#Update").click(function () {
    $.ajax({
            url: '<%= Url.Action("Update", "Editor") %>',
            type: "POST",
            dataType: 'json',
            data: JSON.stringify({aModel: model}),
            success: function (data) {
            }
        }).done(function (result) {
    });
});
当我检查
JSON.stringify({aModel:model})
的结果时,我可以看到我的更改。但是,对象
aModel
不会收到此更改

我尝试清除ModelState,尝试避免缓存,尝试从模型中复制现有元素并更改其值,而不是创建一个新项来推送到Json数组,但这些都不起作用

我的模型如下所示:

public class MyModel
{
     public Dictionary<string, List<Item>> Items { get; set; }
     public List<ItemProperty> Properties { get; set; }
}
以及发布时的序列化模型。与原始模型相比,我唯一更改的是
Name
属性:

"{"Items":
    {"ITEM1":
        [{"SubItems":
            [{"Properties":[],
              "Subtitle":"Other",
              "SubtitleVisible":true,
              "Id":"Other",
              "Visible":true,
              "MyEnumType":0}
             ],
          "Help":"",
          "Name":"ADDED A NAME TO SEND TO THE CONTROLLER",
          "Id":"ITEM1",
          "Time":"/Date(-62135578800000)/"},
      ...

那是因为你在发布一个字符串。看起来像JSON的事实毫无意义。张贴实际对象。默认情况下,jQuery将对其进行编码并以您的操作可以解析的格式发送。当您现在处理它时,您只需发布一个字符串,modelbinder会尝试将其绑定到
MyModel
实例,但因为
MyModel
是类类型,而不是字符串类型,所以它失败了

$.ajax({
        url: '<%= Url.Action("Update", "Editor") %>',
        type: "POST",
        dataType: 'json',
        data: {aModel: model},
        success: function (data) {
        }
    }).done(function (result) {
});
$.ajax({
url:“”,
类型:“POST”,
数据类型:“json”,
数据:{aModel:model},
成功:功能(数据){
}
}).完成(功能(结果){
});

你能在Dotnetfiddle中复制吗。你能发布一个序列化对象样本吗?还有item和itemproperty类还有一个缩减控制器动作,显示你把模型状态放在哪里。etcI添加了一些信息。您的评论使我意识到问题可能存在于复杂类型中。我已经尝试了无参数构造函数和公共设置器,但没有成功。有什么想法吗?没用。因为我使用的是“var model=;”,model(大写为m)不是绑定的对象吗?我不应该做“模型=模型”之类的事吗?不知道你的意思。你试过我贴在这里的代码修改吗。那应该可以解决问题,我试过了。我仍然在接收控制器上没有更改的模型。
"{"Items":
    {"ITEM1":
        [{"SubItems":
            [{"Properties":[],
              "Subtitle":"Other",
              "SubtitleVisible":true,
              "Id":"Other",
              "Visible":true,
              "MyEnumType":0}
             ],
          "Help":"",
          "Name":"ADDED A NAME TO SEND TO THE CONTROLLER",
          "Id":"ITEM1",
          "Time":"/Date(-62135578800000)/"},
      ...
$.ajax({
        url: '<%= Url.Action("Update", "Editor") %>',
        type: "POST",
        dataType: 'json',
        data: {aModel: model},
        success: function (data) {
        }
    }).done(function (result) {
});