我尝试使用AJAX将数据发布回带有viewModel的ASP.NET MVC控制器,如下所示:
public class FunkyThingUpdateModel
{
public int FunkyThing_ID{get;set;}
public string Name{get;set;}
public IDictionary SizesAvailable{ get; set;}
}
不幸的是,我努力让模型绑定器绑定到IDicationary。
如果在传递给控制器的JSON中sizesAvailable
为null
,则成功调用控制器方法。但是,如果sizeAvailable中有数据,那么我会收到内部服务器错误500。
我的JSON格式如下:
{"FunkyThing_ID":1,"Name":"Pogo Stick","SizesAvailable":{"1":"Extra
Large","2":"Extra Tiddly"}}
我不确定的是 - 我是不是想做一些不可能的事情。有没有办法绑定IDictionary - 如果不是最好的选择?
或者我的JSON是否需要以不同的方式进行格式化?
我在这里发现了许多类似的问题,但大多数问题已经很久了。
似乎有一些迹象表明在我使用的MVC 4中这是可能的 - 但我可能误解了背景。
答案 0 :(得分:2)
未经测试,但我认为您必须为要创建的对象指定通用接口定义。
public IDictionary<int, string> SizesAvailable{ get; set;}
并且您还必须更改ajax定义中的数据以将SizesAvailable通知为数组
$.ajax({
url:'your url',
type: 'post',
contentType : 'application/json',
data: JSON.stringify({FunkyThing_ID:1, Name:"Pogo Stick", SizesAvailable:[{key: 1, value:"Extra Large"},{key:2, value: "Extra Tiddly"}]}),
success: function(response){
console.log(response);
}
});
修改强>
如果您的目的是仅获取大小的字符串数组(而不是字典),请更改
public string[] SizesAvailable{ get; set;}
并将数据发送为,
data: JSON.stringify({FunkyThing_ID:1, Name:"Pogo Stick", SizesAvailable:["Extra Large","Extra Tiddly"]}),
希望这会有所帮助。