提交特定的模型对象

时间:2013-12-31 12:36:38

标签: c# asp.net-mvc

我有一个包含以下对象的ViewModel:

  • 拜托我

  • List<Person>家庭

现在,在我的View上,我希望能够编辑,不仅是我的信息,还有我家人的信息(姓名,DoB,地址等)。

我正在考虑建立一个可以绑定到对象'me'的表单和一个用于列表中每个对象的表单。我一直在寻找无法找到解决方案......

2 个答案:

答案 0 :(得分:3)

因此,对于您的视图模型,请创建一个视图:

@model SomeViewModel
<div>
    <h3>Me</h3>
    @Html.EditorFor(m => m.Me)
</div>
<div>
    <h3>My Family</h3>
    @Html.EditorFor(m => m.Family)
</div>

然后,在〜/ Views / Shared或控制器的views文件夹中创建一个名为“EditorTemplates”的文件夹,并在其中添加一个名为“Person.cshtml”的视图,并添加如下代码:

@model Person
<div class="person">
    <div>@Html.TextBoxFor(m => m.Name)</div>
    <div>@Html.TextBoxFor(m => m.Dob)</div>
    <div>etc.</div>
</div>

@Html.EditorFor()然后会在EditorTemplates文件夹中找到Person.cshtml局部视图,并使用它来为每个人呈现HTML。请注意,您对单个人“我”和“家庭”人员列表使用完全相同的语法。 EditorFor将正确创建控件并在ID /名称中对其进行索引(即id ='Family [0] .Name',id ='Family [1] .Name'等)。

答案 1 :(得分:1)

对于这种情况,我会简单地建议部分。

@foreach (var member in Model.Family)
{
    <div class="family-member" id="@member.Id">
        @Html.Partial("_addEditFamilyMember", member)
    </div>
}

部分我看起来像这样(需要更好的格式,但你明白了):

@model StackOverflow.Models.Person

@Html.HiddenFor(x=>x.Id) 
Edit Family Member:
@Html.TextBoxFor(x => x.Name)
@Html.TextBoxFor(x => x.Age)

您需要通过迭代每个家庭成员div并通过$ .ajax帖子调用save方法来连接保存。为了节省不必要的数据库命中,当我更改该容器内的任何字段时,我还会通过向家庭成员div添加“脏”类来跟踪脏更改。然后,当您遍历您的家庭成员进行保存时,您将只选择那些“脏”的。

另一方面,我会将整个视图绑定到List,并在该人员记录列表中包含“Me”记录。由于“我”的人与其他成员没有什么不同,为什么要分开呢?如果确实需要将该成员指定为主成员,则只需创建一个可用作鉴别器的“PersonType”属性。