Как связать список <object>с моделью и отправить вместе с другими данными формы? - PullRequest
0 голосов
/ 29 ноября 2018

Вот что я пытаюсь сделать:

У меня есть форма с некоторыми полями ввода.Часть формы позволяет пользователю выбрать несколько вариантов (Книги), но не будет знать, сколько.

Модель:

public class Data
{
    public string name { get; set; }
    public string age { get; set; }
    ...
    public List<Books> books { get; set; }
    ...
}

И,

public class Books
{
    public string Title { get; set; }
    public string Author { get; set; }
}

Просмотр:

@model Applicants.Models.Data
...
<input type="text" name="Title" value="" />
<input type="text" name="Author" value="" />

У меня вопрос, как мне отправить несколько названий и авторов вместе с другими данными формы? И как правильно назвать поля ввода?

У меня естьПрочитайте это https://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

Но в примере представлен только Список, а не с другими данными.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Поскольку вы используете представление Razor, вы можете использовать строго типизированные @Html.TextBoxFor() помощники и использовать цикл for для создания нескольких текстовых полей внутри books списка:

@model Applicants.Models.Data

@using (Html.BeginForm())
{
    @Html.TextBoxFor(model => model.name)
    @Html.TextBoxFor(model => model.age)

    @for (int i = 0; i < Model.books.Count; i++)
    {
        @Html.TextBoxFor(model => model.books[i].Title)
        @Html.TextBoxFor(model => model.books[i].Author)
    }

    @* don't forget to add submit button here *@
}

Цикл произведет<input> элементов, подобных приведенному ниже примеру, предполагается, что у вас есть действие POST, в котором в качестве параметра viewmodel указано Applicants.Models.Data:

<input name="books[0].Title" type="text" value="sometitle">
<input name="books[0].Author" type="text" value="somevalue">

<input name="books[1].Title" type="text" value="sometitle">
<input name="books[1].Author" type="text" value="somevalue">

<!-- other input elements depending on books list count -->

См. эту скрипку для рабочего примера.

0 голосов
/ 29 ноября 2018

вы можете сделать это для модели связывания для обычного HTML-синтаксиса. Это просто пример, который вам нужно изменить в соответствии с вашими потребностями

<input type="text" name="Model.name" value="Curious George" />
<input type="text" name="Model.age" value="H.A. Rey" />

<input type="text" name="Model.books[0].Title" value="Curious George" />
<input type="text" name="Model.books[0].Author" value="H.A. Rey" />    
...