Как перенести синтаксис из @ Html.RadioButtonFor в @ Html.DropdownlistFor? - PullRequest
0 голосов
/ 31 августа 2018

Как перенести синтаксис из @ Html.RadioButtonFor в @ Html.DropdownlistFor?

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

Изменение синтаксиса с RadioButtonFor на DropdownlistFor не помогает.

 <div class="col-sm-1">


                            @foreach (var item in Model.ExcersiseLevelList)
                            {
                                @Html.RadioButtonFor(model => model.TimesPerDay, item.ID, new { @id = "TimesPerDay" + item.ChoiceText }) @:  @item.ChoiceText
                            }

                            <span asp-validation-for="TimesPerDay" class="text-danger"></span>
                        </div>

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Вы можете создать свойство viewmodel типа List<SelectListItem> и передать его для просмотра в виде списка DropDownListFor (или <select> помощника по тегам в зависимости от вашего выбора):

Модель

public class ViewModel
{
    // other properties

    public List<SelectListItem> ExerciseLevelSelectList { get; set; }
}

Контроллер

public IActionResult ActionName()
{
    var model = new ViewModel();

    // data processing logic here

    model.ExerciseLevelSelectList = model.ExerciseLevelList.Select(x => new SelectListItem
    {
        Text = x.ChoiceText,
        Value = x.ID.ToString() // string conversion if ID has numeric value
    });

    return View(model);
}

View

Использование помощника HTML:

@Html.DropDownListFor(m => m.TimesPerDay, Model.ExerciseLevelSelectList, ...)

Использование select помощника по тегам :

<select asp-for="TimesPerDay" asp-items="Model.ExerciseLevelSelectList"></select> 

Обратите внимание, что свойство Value экземпляра SelectListItem имеет тип string (отметьте здесь ), поэтому ToString() является обязательным, если вы хотите передать числовое значение этому свойству.

0 голосов
/ 31 августа 2018

Это должно работать:

<div class="col-sm-1">
        @Html.DropDownListFor(m => m.TimesPerDay, Model.ExerciseLevelList.Select(e => new SelectListItem() { Text = e.ChoiceText, Value = e.ID.ToString() }))
        <span asp-validation-for="TimesPerDay" class="text-danger"></span>
</div>

См. Ссылку: SelectExtensions.DropDownListFor

Я не уверен, что вы легко можете применить атрибуты html для каждого элемента раскрывающегося списка отдельно (но вы можете сделать это просто для всего раскрывающегося списка с перегрузкой метода)

...