【问题标题】:ASP.NET MVC 5.0 Complex Model bindingASP.NET MVC 5.0 复杂模型绑定
【发布时间】:2015-01-25 13:24:43
【问题描述】:

我有一个名为“创建”的视图。此视图获取包含两个类的“SchoolViewModel”:

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

“SchoolViewModel”中的每个列表都提供来自数据库的数据。

在“创建”页面,您现在应该可以选择教师和班级 (DropDownList)。 “ClassComplete”对象包含两个类(Teacher 和 SchoolClass)和房间名

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

我只想发布“ClassComplete”对象。

我的行动结果

[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" />
    }

这是正确的方法吗?

最好的问候

【问题讨论】:

  • 你的剃须刀是什么样子的?
  • 我为剃刀视图编辑主帖
  • 你能告诉我你的@model指令是什么样子的吗?我在任何地方都没有看到cl
  • @model WebApplication8.Models.SchoolViewModel

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


【解决方案1】:

如果您只想发布 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)
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2015-03-28
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多