我能够将视图返回给具有实体列表的用户,但在该视图中,我希望有一个表单,其中每个实体都可以单独编辑,当用户提交表单时,我将收回所有实体。
addresses = entities.Addresses.Where(m => m.CountryId == null);
return View(addresses);
这会将所有项目带入我使用
管理的视图中@foreach (var item in Model) {
我的问题是,我不知道从表单提交中形成一个动作结果的开始位置,并将所有项目(和更改)带回来。我可以使用视图中的1个单独项目轻松完成此操作,但是当我有一个列表时,我会感到难过。
由于
答案 0 :(得分:0)
如果您正在使用直接MVC,那么由于表单元素的限制,执行批量更新操作会变得非常繁琐。以下是您可以做的事情的粗略草图:
<form action="/mypage">
@foreach(var item in Model) {
<input type="text" name="property1-@item.uniqueID" />
<input type="text" name="property2-@item.uniqueID" />
}
</form>
这种方法很麻烦,因为当回发到你的action方法时,MVC的默认模型绑定不够聪明,不能将property1和property2与某种列表中的同一个对象关联起来,而你&#39 ; ll可能必须通过浏览HttpContext.Request.Form
集合中的表单字段来手动完成。
使用JSON和一些javascript可以使这变得更容易,但结果却使一些客户端代码变得混乱。考虑:
<form action="/mypage">
<input type="hidden"
name="itemsSerialized"
value="JsonConvert.Serialize(Model.Items)" />
@foreach(var item in Model.Items) {
<input type="text" name="property1-@item.uniqueID" />
<input type="text" name="property2-@item.uniqueID" />
}
</form>
<script type="text/javascript">
// write some js code that every time an input is modified for a property,
// update the serialized string in the itemsSerialized hidden input
</script>
第二种方法的优点是你的动作方法变得简单得多,它需要(List<Item> itemsSerialized)
作为参数,而MVC模型绑定应该足够聪明才能正确地将它变成一个列表。
第二个优点是,您可能会将其转换为基于API的ajax页面,而不是依赖于POSTS,如果这是您最终想要的。