代码之家  ›  专栏  ›  技术社区  ›  Bruno Reis

ASP.NET MVC 1.0-字典的模型绑定器

  •  5
  • Bruno Reis  · 技术社区  · 15 年前

    视图模型

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

    然后我有几个 GET / POST 得到 Dictionary<int, string> 使用数据库中的一些数据,然后返回 View :

    • 这个 .Key s将打开 ;和
    • 这个 .Value 文本区域 供用户编辑。

    然后,用户将提交此表单,并调用 岗位 Key / Value 对将是 有效的 无效的

    如果有无效对,则 岗位 然后,操作将重建 视图模型 ,但这次字典应该只包含 无效的

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

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

    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++; } %>
    

    问题是为了取悦 模型绑定器 for (var i = 0; i < Model.Data.Count; i++) {...} 循环。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Alexander Prokofyev    14 年前

    本文描述了解决方案- Dictionary Model Binder in ASP.NET MVC2 and MVC3

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