Я пытаюсь выяснить, как я могу определить свой собственный 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.
Есть несколько способов сделать это.
@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>
Этот способ примет предварительно сконфигурированное значение, если у вас есть полоса модели для формы ввода.
Пожалуйста, попробуйте приведенный ниже код, чтобы исправить проблему
@Html.DropDownListFor(m => top.SubTopics, new SelectList(top.SubTopics, "TopicId", "Name"))