ASP.NET MVC + бритва: несколько раскрывающихся списков с одинаковыми параметрами - PullRequest
0 голосов
/ 18 марта 2019

У меня есть модель, в которой есть список объектов, которые все должны иметь редактируемый выпадающий список.Например, рассмотрим библиотеку книг со следующим определением:

class Category
{
    int id;
    int name;
}

class Book
{
    int id;
    string name;
    int categoryId;
}

class Library
{
    List <Book> books;
}

Таким образом, в библиотеке есть список книг, и у каждой книги есть категория.В пользовательском интерфейсе категория выбирается из раскрывающегося списка, поэтому существует один раскрывающийся список на книгу.Список категорий одинаков для всех книг.Как я мог сделать эту работу с бритвой?При попытке привязать раскрывающийся список к определенному индексу в списке книг с помощью html helper переменная индекса использует свое последнее значение, поэтому все раскрывающиеся списки привязываются к одной и той же книге.Кроме того, как будет обрабатываться добавление / удаление книг?

Упрощенная версия представления:

@for (int i = 0; i < Model.Books.Count; ++i)
{
    <tr>
        <td>
            @Html.DropDownListFor(model => model.Books[i].CategoryId, (IEnumerable<SelectListItem>)ViewBag.Categories)
        </td>
    </tr>
}

Редактировать: Проблема в том, что раскрывающиеся списки не получают начальное значение.Если я изменю их и сохраню список, правильные значения будут отправлены обратно в бэкэнд.Есть идеи, чем это может быть вызвано?

1 Ответ

0 голосов
/ 20 марта 2019

Нашел решение, хотя и не очень элегантное. Я создаю новый раскрывающийся список для каждой книги и устанавливаю выбранное значение в этих раскрывающихся списках:

DropDownListFor(model => model.Books[i].CategoryId, ((IEnumerable<SelectListItem>)ViewBag.Categories).Select(x => new SelectListItem(){Value = x.Value, Text = x.Text, Selected = Model.Books[i].CategoryId.ToString() == x.Value}))
...