MVC.NET: определить строго типизированный HTML Helper для DropDownList

0

Я пытаюсь выяснить, как я могу определить свой собственный HtmlHelper для создания выпадающего списка. У меня есть следующий сценарий: я использую плагин select2 jQuery (http://ivaynberg.github.io/select2/) для нескольких выборок с поиском и лучшим интерфейсом. Моя модель имеет x id связанных тегов. Насколько я понимаю, эти теги могут получать только значение, когда используется помощник Html, например @Html.DropDownListFor()? я бы хотел

  • написать чистый html и как-то сказать, что значение должно быть сохранено в списке tag-id в моей модели

    ИЛИ

  • создайте HTML-помощник, который может добиться такого же эффекта.

В настоящее время у меня есть это, но я не вижу способа передать выбранные значения модели при отправке формы:

<div>
        <label>Kies je thema (maximum 2):</label>
        <select id="select2select" multiple style="width: 500px">
            @foreach (var top in ((List<Topic>)ViewBag.TopIds).Where(top => top.MainTopic == null))
            {
                <option value="@top.TopicId" class="optionGroup">@top.Name</option>
                foreach (var subTopic in top.SubTopics)
                {
                    <option value="@subTopic.TopicId" class="optionChild">@subTopic.Name</option>
                }
            }
        </select>
    </div>

Как я могу получить выбранное значение в свойстве в моем списке, сохраняя эту структуру?

Дополнительно: как вы видите, мои варианты имеют классы, это потому, что у меня есть основные теги и субтитры. Пользователи могут выбирать либо основные теги, либо субтитры, поэтому я не могу работать с <optiongroup> потому что их "группы" должны быть доступны. Я даю им, в зависимости от их класса, другой формат с использованием формата select2.

  • 0
    добавьте атрибут name в тег select с именем вашего свойства, и вы получите значения, разделенные запятыми, при публикации формы ...
  • 0
    О, попробую! Спасибо! Но должно ли свойство быть строкой или это может быть List <int>?
Показать ещё 1 комментарий
Теги:
asp.net-mvc

2 ответа

0

Есть несколько способов сделать это.

@Html.DropDownListFor(m => top.SubTopics, new SelectList(top.SubTopics, "TopicId", "Name"))

@Html.DropDownListFor(m => Model.SubTopics, Model.SubTopics, null, htmlAttributes: new { @class = "ui search selection dropdown clearable", @clearable = "", @id = "Model_SubTopics" })

Эти два могут иметь проблемы с изменением значений "имени" атрибута html для разных группировок моделей.

Вы можете использовать Tag Helper, чтобы сделать это более современным способом.

<select asp-for="Model.SubTopics" asp-items="@Model.SubTopics"  class="ui search selection dropdown clearable" ></select>

Этот способ примет предварительно сконфигурированное значение, если у вас есть полоса модели для формы ввода.

0

Пожалуйста, попробуйте приведенный ниже код, чтобы исправить проблему

 @Html.DropDownListFor(m => top.SubTopics, new SelectList(top.SubTopics, "TopicId", "Name"))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню