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) {
});