ASP.NET MVC LIST和Create在同一视图中

时间:2011-02-22 22:36:57

标签: c# asp.net asp.net-mvc asp.net-mvc-3

好的我有一个View强制类型为MyObject的集合

@model IEnumerable<ViewModels.MyObject>

我遍历集合以创建对象列表。

在同一页面上,我需要创建表单以添加新的MyObject。

有没有办法在lambda表达式中使用Html帮助器来创建从我的模型中强类型化的元素?

或者最好将此页面的Form部分作为另一个部分视图加载为MyObject(不是集合)?

2 个答案:

答案 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>
...