寻找MVC2 / 3的常见模式 - 批量视图/模型更新

时间:2011-02-14 17:07:44

标签: asp.net-mvc-2

我研究了几种不同的场景,关于对视图绑定对象列表执行批量更新(视图到模型)的最佳方法,但是没有找到关于“最佳”的真正明确的方法实现这一目标的方法。我是MVC的新手并且通过回到我们的一些内部应用程序并在MVC 2下重新创建它来自学。我发现处理单个对象更新很容易,但是倍数给我带来了一些麻烦。

一点背景......

假设您有一个模型对象是List的视图。渲染页面时,视图会迭代模型的集合,并使用一系列文本框,标签和其他与UI相关的内容构建单个表单...想想显示一周中的日期和两个显示“小时”的字段和'加班时间'。呈现的页面有一个单独的html表单,其操作为“update”,并带有List的参数。有一个输入可以调用此操作。预期的行为是视图将所有对象发送回控制器以进行更新。例如,如果星期五加载时间表,并且从星期二开始之前的小时数,则用户可以更改星期二的小时数,将更多小时数添加到一周中的其他日期,删除小时等等...所有这些都来自单个“提交”按钮。

我显然可以进行单一更新,但我正在寻找一种批量执行此操作的方法。

在拼写时间表应用程序之前,我拼凑了一个我想要解决的快速示例。

控制器动作示例:

public ActionResult Index()
    {
        List<SampleModel> data = _repo.List();
        return View(data);
    }

示例'保存'动作:

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Save(List<SampleModel> mod)
    {
        //Save code removed             
        return RedirectToAction("Index");
    }

正在构建的示例视图表单:

 <% using (Html.BeginForm("Save", "Home"))//,new {Collection= Model}
   { %> 

<div class="cont">

<% for (int i = 0; i < Model.Count; i++)//foreach (var a in Model)
   {
       var a = Model[i];%>

        <div class="child">
            <div class="header">
                <img alt="" src="../../Img/no.png" class="close" />
                <h3><%: Html.Label(a.Name)%></h3>
            </div>
            <div class="info">
                <%: Html.TextAreaFor(r => a.Msg) %>
                <br />
                <% for (int t = 0; t < a.Hours.Count; t++)
                   { %>

                   <p>
                        <%: Html.Label("Hours") %>
                        <%: Html.TextBoxFor(m => a.Hours[t]) %>
                   </p>

                <%} %>
            </div>

        </div>

<% } %>


<br class="clr" />

<input type="submit" value="Save Changes" />

</div>

<% } %>

虽然这个示例并没有完全重新创建我需要做的事情,但它足够接近一般的想法。我们有一个带有通用列表的模型,列表中的每个对象都有一个可编辑的属性和可以编辑的对象集合。

调用控制器方法时,传回的列表为null。在检查Fiddler跟踪时,我看到名称值对返回,但它们以迭代器的局部变量引用开头(例如:a.Msg = update&amp; a.Hours%5B0%5D = 1&amp; a.Hours%5B1%5D = 1安培; a.Hours%5B2%5D = 12&安培; a.Msg =你好+从+ ID +%23 + 1和; a.Hours%5B0%5D = 39&安培; a.Hours%5B1%5D = 43&安培; a.Hours% 5B2%5D = 21&安培; a.Msg =你好+从+ ID +%23 + 2及a.Hours%5B0%5D = 18&安培; a.Hours%5B1%5D = 41&安培; a.Hours%5B2%5D = 26&安培; a.Msg =你好+从+ ID + 23%+ 3及a.Hours%5B0%5D = 27&安培; a.Hours%5B1%5D = 9&安培; a.Hours%5B2%5D = 28)

从此我收集控制器无法创建List。有人能指出我如何进行这种“批量”操作吗?

提前感谢所有人!

1 个答案:

答案 0 :(得分:0)