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

asp.net-mvc – ASP.NET MVC 1.0 – 字典的模型绑定器

发布时间:2020-12-16 07:43:10 所属栏目:asp.Net 来源:网络整理
导读:我有一个包含Dictionary的ViewModel类(以及此问题的其他不相关的东西): public class MyViewModel { public Dictionaryint,string Data { get; set; } /* ... */} 然后我有几个处理字典的GET / POST动作. GET操作将首先填充Dictionary int,string从数据库中
我有一个包含Dictionary的ViewModel类(以及此问题的其他不相关的东西):

public class MyViewModel {
    public Dictionary<int,string> Data { get; set; }
    /* ... */
}

然后我有几个处理字典的GET / POST动作. GET操作将首先填充Dictionary< int,string>从数据库中获取一些数据,然后返回一个View:

> .Keys将在隐藏的领域;和
> .Values将在textareas上供用户编辑.

然后,用户将提交此表单,并调用POST操作.它将尝试处理输入(该过程无关紧要).一些键/值对将是有效的,一些将是无效的.

如果存在无效对,则POST操作将重建ViewModel,但这次字典应仅包含无效对,并将重新显示相同的View以供用户修复并再次尝试提交.

问题:什么是最简单的&最干净的方法来实现这一目标?

到目前为止(工作正常),在控制器中:

public ActionResult MyAction(MyViewModel vm) {
    /* Process data */
    if (are there invalid pairs?) {
        var vmErrors = new MyViewModel();
        /* ... fill the ViewModel ... */
        vmErrors.Data = 
            vm.Data
                .Where(x => IsInvalid(x))
                .ToDictionary(x => x.Key,x => x.Value);
        return View(vmErrors);
    }
}

并且观点:

<% var i = 0; foreach (var p in Model.Data) { %>
    <%= Html.Hidden("vm.Data[" + i + "].key",vm.Key %>
    <%= Html.TextArea("vm.Data[" + i + "].value",vm.Value %>
<% i++; } %>

问题是,为了取悦模型绑定器,我必须使用顺序ID在视图上命名我的字段.但我还必须迭代字典以提取键/值对,因此它不能是for(var i = 0; i< Model.Data.Count; i){...}循环.

解决方法

该文章描述了解决方案 – Dictionary Model Binder in ASP.NET MVC2 and MVC3

该代码是通用的,也可以与MVC 1一起使用.

(编辑:李大同)

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

    推荐文章
      热点阅读