加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 将javascript对象作为字典传输到控制器操作中

发布时间:2020-12-16 00:10:06 所属栏目:asp.Net 来源:网络整理
导读:有没有办法传递这个JavaScript对象 Object { 35=true,179=true,181=true} 进入控制器动作 Dictionaryint,bool 我检查了以下方法: var remoteUrl = "@Url.Action("UpdateProjectStructureSelection")" + "?tlpId=@Model.TopLevelProjectId"; $.post(remoteUr
有没有办法传递这个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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读