我有一个名为"创建"的视图。这个视图得到了" 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" />
}
这是正确的方法吗?
最好的问候
答案 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)
...