Asp.net mvc 2 寻找MVC2/3的通用模式-批量视图/模型更新

Asp.net mvc 2 寻找MVC2/3的通用模式-批量视图/模型更新,asp.net-mvc-2,Asp.net Mvc 2,我已经研究了几个不同的场景,研究了对视图绑定对象列表执行批量更新(视图到模型)的最佳方法,但还没有找到一个真正明确的方法来实现这一点。我是MVC新手,我通过回到我们的一些内部应用程序并在MVC2下重新创建它们来自学。我发现处理单个对象更新很容易,但多次更新给我带来了一些麻烦 有点背景 假设您有一个模型对象为列表的视图。呈现页面时,视图会迭代模型的集合,并使用一系列文本框、标签和其他与UI相关的内容构建一个表单。。。设想一张显示一周中几天的时间表和两个显示“小时”和“加班时间”的字段。呈现的页面有

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

有点背景

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

很明显,我可以做单次更新,但我正在寻找一种批量更新的方法

在处理时间表应用程序之前,我已经拼凑了一个我想解决的快速示例

控制器操作示例:

public ActionResult Index()
    {
        List<SampleModel> data = _repo.List();
        return View(data);
    }
public ActionResult Index()
{
列表数据=_repo.List();
返回视图(数据);
}
“保存”操作示例:

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Save(List<SampleModel> mod)
    {
        //Save code removed             
        return RedirectToAction("Index");
    }
[AcceptVerbs(HttpVerbs.Post)]
公共操作结果保存(列表修改)
{
//保存删除的代码
返回操作(“索引”);
}
正在构造的视图表单示例:

 <% 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>

<% } %>

a、 味精)%>

a、 小时[t])%>


虽然这个示例并没有完全重现我需要做的事情,但它已经足够接近给出总体思路。我们有一个带有通用列表的模型,列表中的每个对象都有一个可编辑属性和对象集合,这些对象也可以编辑

调用控制器方法时,传回的列表为null。在检查Fiddler跟踪时,我看到namevalue对返回,但迭代器的局部变量引用将它们放在前面(例如:a.a.Msg=更新和a.a.Msg=更新和a.a.a.a.a.a.a.a.a.a.a.a.a.Msg=10%5B2%5B%2%5B2%5B.Msg=更新和a.a.a.a.a.Msg=更新和a.a.a.a.a.Msg=a.Msg=更新=更新和a.Msg=更新和a.Msg=更新(a.Msg=a.Msg=a.Msg=更新=更新(a.Msg=更新)a.Msg=更新和a.Msg=更新和a.Msg=更新和a.a.Msg=更新和a.Msg=更新和a.a.Msg=更新和a.Msg=更新和a.Msg=更新和a.a.Msg=a.a.Msg=a.a.Msg=a.a.Msg=a.Msg 5B2%5D=28)

据我所知,控制器无法创建列表。有人能告诉我如何执行这种“批量”操作吗


提前感谢大家!

如何绑定到列表

谢谢-这是我以前见过的,但不确定这是否是执行此场景的最佳方法。我想知道这是否会在新的ASP.NET MVC版本中保持一致……我认为(与MS tech打交道时很危险)这是因为底层HTTP POST是MVC重建其模型对象所依赖的,并且该协议是通用且一致的。@Ursusmajor,使用的机制是
IModelBinder
及其实现者。他们可能会改变这一点,但我不会打赌。