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