заполнить вид на основе многоуровневой модели - PullRequest
0 голосов
/ 03 января 2012

Предположим, у меня есть модели:

public class Person
{
  public sting Name {get;set;}
  public List<Book> Books {get;set;}
}

public class Book
{
  public sting NameBook {get;set;}
}

Как представить представление для метода Edit на основе модели Person (MVC 3)?

1 Ответ

1 голос
/ 03 января 2012

Вы можете попробовать что-то вроде:

@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");
}
...