如何将语法从@ Html.RadioButtonFor迁移到@ Html.DropdownlistFor?

时间:2018-08-31 16:37:12

标签: jquery asp.net-mvc-4

如何将语法从@ 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>

3 个答案:

答案 0 :(得分:0)

这应该有效:

<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属性(但是您可以通过方法重载简单地对整个下拉列表执行此操作)

答案 1 :(得分:0)

您可以创建一个类型为List<SelectListItem>的viewmodel属性,并将其传递为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);
}

查看

使用HTML助手:

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

使用select tag helper

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

请注意,Value实例的SelectListItem属性具有string类型(检查here),因此,如果要向其传递数值,则ToString()是必需的属性。

答案 2 :(得分:0)

您可以尝试

<div class="col-sm-1">
<%:Html.DropDownListFor(model => model.NewMode, new SelectList(Model.PaymentModeList, "PaymentModeDescription", "PaymentModeDescription"), "Select Mode", new { @class = "inputtext width200px" })%>                    

</div>