有没有办法传递这个JavaScript对象
Object { 35=true,179=true,181=true}
进入控制器动作
Dictionary<int,bool>
我检查了以下方法:
var remoteUrl = "@Url.Action("UpdateProjectStructureSelection")" + "?tlpId=@Model.TopLevelProjectId"; $.post(remoteUrl,mapSiteSelectionChoices,function(callbackResult) { alert(callbackResult); });
和
var remoteUrl = "@Url.Action("UpdateProjectStructureSelection")" + "?tlpId=@Model.TopLevelProjectId"; $.post(remoteUrl,{ values : mapSiteSelectionChoices },function(callbackResult) { alert(callbackResult); });
但是在这两种情况下
public ActionResult UpdateProjectStructureSelection(int tlpId,Dictionary<int,bool> values)
被称为,但价值观是空的.
因为我已经将更复杂的类型转换为控制器动作而没有编写自定义模型绑定器,所以我一直在想我是否只是在这里做错了.
自定义模型绑定器是将它作为字典的唯一方法吗? (除了在客户端使用JsonConvert stringify之外)
加法(这有效,但我喜欢避免额外的代码):
public ActionResult UpdateProjectStructureSelection(int tlpId,string values) { var dict = JsonConvert.DeserializeObject<Dictionary<int,bool>>(values); }
解决方法
不是该格式的对象.它需要采用以下格式才能由DefaultModelBinder使用
var data = { 'dict[0].key': '35','dict[0].value': 'True','dict[1].key': '179','values[1].value': 'True',dict[0].key': '8','dict[0].value': 'True' }; $.post(remoteUrl,data,function(callbackResult) {
和控制器
public ActionResult UpdateProjectStructureSelection(Dictionary<int,bool> dict)
如您所述,另一种选择是使用自定义ModelBinder,例如this answer
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。