好的我有一个View强制类型为MyObject的集合
@model IEnumerable<ViewModels.MyObject>
我遍历集合以创建对象列表。
在同一页面上,我需要创建表单以添加新的MyObject。
有没有办法在lambda表达式中使用Html帮助器来创建从我的模型中强类型化的元素?
或者最好将此页面的Form部分作为另一个部分视图加载为MyObject(不是集合)?
答案 0 :(得分:7)
您可以使用两个视图模型创建视图模型作为属性:
class ListCreateViewModel {
ListViewModel ListViewModel { get; set; }
CreateViewModel CreateViewModel { get; set; }
}
然后你可以使用
Html.RenderPartial("Create", Model.CreateViewModel);
您的部分将CreateViewModel
作为模型。
您还可以制作完全独立的视图和模型并致电:
Html.RenderAction("Create", "Controller");
RenderAction
表现为新请求,视图在不同的上下文中呈现。
答案 1 :(得分:4)
我遍历集合以创建对象列表。
为什么要循环?在一个视图中循环是丑陋的。您可以使用编辑器模板:
@model IEnumerable<ViewModels.MyObject>
@using (Html.BeginForm())
{
@Html.EditorForModel()
<input type="submit" value="Go!" />
}
并在相应的编辑器模板中为模型集合的每个项目调用(~/Views/Shared/EditorTemplates/MyObject.cshtml
):
@model ViewModels.MyObject
<div>
@Html.LabelFor(x => x.Prop1)
@Html.TextBoxFor(x => x.Prop1)
@Html.ValidationMessageFor(x => x.Prop1)
</div>
<div>
@Html.LabelFor(x => x.Prop2)
@Html.TextBoxFor(x => x.Prop2)
@Html.ValidationMessageFor(x => x.Prop2)
</div>
...