【问题标题】:populate view based on multi-level model基于多级模型填充视图
【发布时间】:2012-01-03 22:54:52
【问题描述】:
假设,我有模型:
public class Person
{
public sting Name {get;set;}
public List<Book> Books {get;set;}
}
public class Book
{
public sting NameBook {get;set;}
}
如何基于 Person 模型 (MVC 3) 表示 Edit 方法的视图?
【问题讨论】:
标签:
asp.net
asp.net-mvc-3
models
【解决方案1】:
您可以尝试以下方式:
@model Person
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(x => x.Name)
@Html.EditorFor(x => x.Name)
</div>
@Html.EditorFor(x => x.Book)
<button type="submit">Edit</button>
}
然后您将为 Book 类型 (~/Views/Shared/EditorTemplates/Book.cshtml) 定义一个编辑器模板,该模板将为 Book 属性集合的每个元素呈现(顺便说一下,您将按顺序命名为 Books在您的视图模型上遵循标准约定):
@model Book
<div>
@Html.LabelFor(x => x.NameBook)
@Html.EditorFor(x => x.NameBook)
</div>
就您的控制器操作而言,这是非常标准的东西:
public ActionResult Edit(int id)
{
var person = _personRepository.Get(id);
return View(model);
}
[HttpPost]
public ActionResult Edit(Person person)
{
if (!ModelState.IsValid)
{
return View(person);
}
_personRepository.Update(person);
return RedirectToAction("Success");
}