如何使用数据注释创建下拉列表?
我想实现
生成的标记@Html.DropDownListFor(x=>x.ContactType, Model.ContactTypeOptions)
要设置,以便我可以使用,它会生成下拉列表:
@Html.EditorForModel(Model)
我目前的模特是:
public class ContactModel
{
public string ContactType { get; set; }
public IList<SelectListItem> ContactTypeOptions
{
get
{
return new List<SelectListItem>()
{
new SelectListItem(){Text = "Options"}
};
}
}
[Required(AllowEmptyStrings = false)]
[MinLength(15)]
[DataType(DataType.MultilineText)]
public string Message { get; set; }
}
更新 我不想使用局部视图。
答案 0 :(得分:0)
您可以尝试这样的事情:
public class ContactModel
{
[UIHint("_DropDownList")]
public SelectList ContactType { get; set; }
}
设置(在您的控制器中)ContactType.Items
作为您的选项列表,并ContactType.SelectedValue
作为您最初选择的值。
然后定义局部视图 _DropDownList.cshtml :
@model SelectList
@Html.DropDownListFor(m => m.SelectedValue, Model)
然后,您应该可以使用@Html.EditorFor(m => m.ContactType)
并获取下拉列表。你可以在任何地方重复使用它!
当@Html.EditorFor(m => m.Property)
m.Property
为SelectList
EditorForModel()
时,您甚至可能会立即获得此行为。不确定那个。
如果您希望在ContactModel
上使用ContactModel.cshtml
,那么您只需创建名为@model ContactModel
@Html.DropDownListFor(m => m.ContactType,
new SelectList(Model.ContactTypeOptions, Model.ContactType))
的编辑器模板即可:
@Html.EditorForModel()
请注意,在已经键入ContactModel
的视图中,这应该被称为EditorForModel(Object)
- 作为重载EditorForModel
中的参数传入的对象用于其他视图数据,< em> not 表示模型对象。 {{1}}始终为当前视图模型呈现编辑器模板。