ASP.NET MVC 5.0复杂模型绑定

时间:2015-01-25 13:24:44

标签: asp.net-mvc asp.net-mvc-5

我有一个名为"创建"的视图。这个视图得到了" SchoolViewModel"它包含两个类:

public class SchoolViewModel
{
    public List<Teacher> ListTeacher { get; set; }
    public List<SchoolClass> ListSchoolClass { get; set; }
    public ClassComplete ClassComplete { get; set; }
}

&#34; SchoolViewModel&#34;中的每个列表提供数据库中的数据。

在&#34;创建&#34;您现在应该可以选择教师和班级(DropDownList)。 &#34; ClassComplete&#34; object包含两个类(Teacher和SchoolClass)和roomname

public class ClassComplete
{
    public string RoomName { get; set; }
    public SchoolClass SchoolClass { get; set; }
    public Teacher Teacher { get; set; }
}

我只想发布&#34; ClassComplete&#34;对象

我的ActionResult

[HttpPost]
public ActionResult Create(ClassComplete cp)
{
        // Do something
        return View();
}

编辑: 剃刀视图

 @using (Html.BeginForm())
    {
        @Html.EditorFor(m => m.ListTeacher[0].TeacherName)
        @Html.EditorFor(m => m.ListSchoolClass[0].ClassName)

        @Html.TextBoxFor(m => m.cl.RoomName)<br />

        <input type="submit" value="Click" />
    }

这是正确的方法吗?

最好的问候

1 个答案:

答案 0 :(得分:2)

如果您只想发布ClassComplete模型,则需要指明绑定前缀:

[HttpPost]
public ActionResult Create([Bind(Prefix="ClassComplete")] ClassComplete cp)
{
    // Do something
    return View();
}

并在您看来:

@using (Html.BeginForm())
{
    @Html.TextBoxFor(m => m.ClassComplete.RoomName)
    <br />
    <input type="submit" value="Click" />
}

TextBoxFor将在生成的标记中生成以下输入字段:

<input type="text" name="ClassComplete.RoomName" />

注意输入字段的name。这就是您需要在控制器操作中指明此前缀的原因。

如果您想要发送它们,这也适用于其他属性,您只需要包含相应的输入字段:

@Html.TextBoxFor(m => m.ClassComplete.SchoolClass.SomeProperty)
@Html.TextBoxFor(m => m.ClassComplete.Teacher.SomeOtherProperty)
...