Asp.net mvc 2 寻找MVC2/3的通用模式-批量视图/模型更新
我已经研究了几个不同的场景,研究了对视图绑定对象列表执行批量更新(视图到模型)的最佳方法,但还没有找到一个真正明确的方法来实现这一点。我是MVC新手,我通过回到我们的一些内部应用程序并在MVC2下重新创建它们来自学。我发现处理单个对象更新很容易,但多次更新给我带来了一些麻烦 有点背景 假设您有一个模型对象为列表的视图。呈现页面时,视图会迭代模型的集合,并使用一系列文本框、标签和其他与UI相关的内容构建一个表单。。。设想一张显示一周中几天的时间表和两个显示“小时”和“加班时间”的字段。呈现的页面有一个单独的html表单,其操作是“更新”,并采用List参数。只有一个输入调用此操作。预期的行为是视图将所有对象发送回控制器进行更新。例如,如果在星期五加载时间表,并且从星期二开始的小时数已提前完成,则用户可以更改星期二的小时数,将更多的小时数添加到一周的其他几天,删除小时数,等等。。。所有这些都来自单个“提交”按钮 很明显,我可以做单次更新,但我正在寻找一种批量更新的方法 在处理时间表应用程序之前,我已经拼凑了一个我想解决的快速示例 控制器操作示例:Asp.net mvc 2 寻找MVC2/3的通用模式-批量视图/模型更新,asp.net-mvc-2,Asp.net Mvc 2,我已经研究了几个不同的场景,研究了对视图绑定对象列表执行批量更新(视图到模型)的最佳方法,但还没有找到一个真正明确的方法来实现这一点。我是MVC新手,我通过回到我们的一些内部应用程序并在MVC2下重新创建它们来自学。我发现处理单个对象更新很容易,但多次更新给我带来了一些麻烦 有点背景 假设您有一个模型对象为列表的视图。呈现页面时,视图会迭代模型的集合,并使用一系列文本框、标签和其他与UI相关的内容构建一个表单。。。设想一张显示一周中几天的时间表和两个显示“小时”和“加班时间”的字段。呈现的页面有
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
及其实现者。他们可能会改变这一点,但我不会打赌。