根据字符串 asp.net 的值自动选择 DropdownListfor mvc

DropdownListfor to be auto selected on the basis of a value of string asp.net mvc

我的模型中有一个字符串和一个列表属性

public string  _drinkType { get; set; }
public List<SelectListItem> _drinkTypeDropDown { get; set; }

在我看来

@Html.DropDownListFor(m => m._drinkTypeDropDown , new List<SelectListItem>
{
    new SelectListItem{Text="Milk", Value="1"},
    new SelectListItem{Text="coffee", Value="2"},
    new SelectListItem{Text="tea", Value="3"}
}

现在在我的控制器中,我在 属性 _drinkType 中得到值 "Milk"、"tea" 和 "coffee"。当它与 属性 值

匹配时,我必须在 DropdownlistFor 中设置所选选项

有点像 if _drinktype = milk 然后 dropdownlistFor 将自动加载并选择 Milk

您可以在控制器中使用可能的选项设置 ViewBag 属性,模型只能保留 属性,它将保留实际值。在您的控制器中,将值添加到 ViewBag:

ViewBag.DrinkTypeDropDown = new List<SelectListItem>()
{
    new SelectListItem{Text="Milk", Value="1"},
    new SelectListItem{Text="coffee", Value="2"},
    new SelectListItem{Text="tea", Value="3"}
};

在您的下拉列表中声明:

@Html.DropDownListFor(model => model._drinkType, (IEnumerable<SelectListItem>)ViewBag.DrinkTypeDropDown)

编辑: 因为你有 Text 属性 并且如果 Value 中有匹配项,则所选选项将被选中SelectedListItem,您可以在模型中添加 属性:

public string _drinkTypeValue { get; set; }

在从控制器操作结果返回视图之前,您必须根据 _drinkType 的值设置 _drinkTypeValue:

model._drinkTypeValue = model._drinkTypeDropDown.Where(item => item.Text == model._drinkType).FirstOrDefault().Value; // You will have to treat null values of FirstOrDefault() here

在您看来,将下拉值绑定到 _drinkTypeValue:

@Html.DropDownListFor(model => model._drinkTypeValue, Model._drinkTypeDropDown)

当用户提交表单时,它实际上会提交 _drinkTypeValue,因此您必须以类似的方式将其再次转换为 _drinkType