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)
...