Отображение "сложной модели" во View

ASP.NET
  1. 3 года назад
    Добавлено 3 года назад Anton

    День добрый, подскажите пожалуйста, как лучше сделать "правильное" отображение модели следующего вида во View. Хочется, чтобы вложенные списки BookCheckList и объекты DeafultBook сами отображались и обрабатывались также как и первичные поля. Это вообще работает "из коробки", или надо дополнительно допиливать руками?

    Model:
    public class BookChecked { public int Id { get; set; } public string Name { get; set; } public bool Enabled { get; set; } } public class StudentView { public int Id { get; set; } public string LastName { get; set; } public int Age { get; set; } public List<BookChecked> BookCheckList { get; set; } public BookChecked DeafultBook{ get; set; } public StudentView() { BookCheckList = new List<BookChecked>(); BookChecked DefaultBook = new BookChecked() { Id = 100, Name = "Книга по умолчанию", Enabled = true }; } }

    Controller:
    public ActionResult Index() { StudentView stv = new StudentView() { Age = 30, LastName = "Студент1", Id = 1 }; stv.BookCheckList.Add(new BookChecked { Id = 1, Name = "C#", Enabled = true }); stv.BookCheckList.Add(new BookChecked { Id = 2, Name = "Математика", Enabled = false }); return View(stv); }

    View:

    @model DifficultModel.Models.StudentView
    
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
    </head>
    <body>
            @Html.DisplayFor(m => Model);
    </body>
    </html>
  2. Alexandr_Erohin

    Jun 14 Администратор

    Что получить то в результате требуется?

  3. Частично уже разобрался, но возникли следующие вопросы... Написал более развернуто на SO: http://ru.stackoverflow.com/questions/535139/Отображение-модели-для-редактирования-в-c-asp-net-mvc

    Главный вопрос на данный момент такой: Есть модель, есть её отображение во View. Те поля модели что отображаются в HTML элементах для редактирования, после нажатия кнопки "submit" попадают в контроллер, где их можно поймать в [HttpPost]. Там же делаем валидацию, и если модель её не проходит то мы делаем обратный возврат модели View(model). При обратном возврате, отображаются сообщения об ошибках, поля заполняются теми значениями что указал пользователь, но теряются те значения, которые не входили в редактируемые элементы.
    То есть:

    до "submit было"

    Фамилия:
    [input]Иванов[/input]

    Возраст
    [input][/input]

    Подписка на книги:
    [checkbox checked] C#
    [checkbox]Математика
    [checkbox checked] Английски

    После валидации, и возврата с ошибкой стало:

    Фамилия:
    [input]Иванов[/input]

    Возраст
    [input][/input] ОШИБКА не указан возраст

    Подписка на книги:
    [checkbox checked]
    [checkbox]
    [checkbox checked]

    Исчезают названия книг, т.к. они указывались просто текстом, а не в редактируемых элементах.

    Я пока как временное решение стал их дублировать в hidden полях формы, но подозреваю что это велосипед. Вопрос: как сделать правильно?

  4. Извиняюсь за сумбур, но не понимаю как это нормально описать...

или зарегистрируйтесь чтобы ответить