如何对值中的选择列表进行硬编码?

时间:2018-11-02 21:49:10

标签: asp.net asp.net-mvc razor

在我的编辑页面中,使用EditorFor编辑位置值。

@Html.EditorFor(model => model.location, new { htmlAttributes = new { @class = "form-control" , id = "testing" } })

但是我想对值进行编辑,如下所示。

如何使它默认为正确的值并能够选择其他选项。

 var selectLocation = new SelectList(
     new List<SelectListItem>
     {

            new SelectListItem {Text = "State", Value = "State"},
             new SelectListItem {Text = "International", Value = "International"},
              new SelectListItem {Text = "test2", Value = "test2"},
     }, "Value", "Text");

1 个答案:

答案 0 :(得分:2)

用于生成@Html.EditorFor()元素而不是<input>元素的<select>助手。您应该在视图模型上使用类型为IEnumerable<SelectListItem>的属性:

public class ViewModel
{
    public string location { get; set; }

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

并在这样的控制器操作方法中分配它:

var model = new ViewModel();

var selectLocation = new List<SelectListItem>()
{
    new SelectListItem {Text = "State", Value = "State"},
    new SelectListItem {Text = "International", Value = "International"},
    new SelectListItem {Text = "test2", Value = "test2"},
};

model.Locations = selectLocation;

// return the view with existing viewmodel
return View(model);

然后,使用@Html.DropDownListFor()帮助程序生成带有选项列表的<select>元素:

@Html.DropDownListFor(model => model.location, Model.Locations, ...)

注意:

1)如果已经创建了List<SelectListItem>对象,则无需将其转换为SelectList对象,因为SelectList的选项列表也具有IEnumerable<SelectListItem>类型。

2)另外,您也可以使用ViewBag传递List<SelectListItem>对象,但是上述方法通常用于强类型选项列表。