我希望在模型中有一个静态的数据列表,可以在视图模型和视图中使用下拉列表。我希望能够在我的控制器中以这种方式使用它:
MaintenanceTypeList = new SelectList(g, "MaintenanceTypeID", "MaintenanceTypeName"),
并在我的视图中访问它:
@Html.LabelFor(model => model.MaintenanceTypeID)
@Html.DropDownListFor(x => x.MaintenanceTypeID, Model.MaintenanceTypeList, "-- Select --", new { style = "width: 150px;" })
@Html.ValidationMessageFor(x => x.MaintenanceTypeID)
我目前正在为数据库中的数据使用存储库模式,但不希望将此数据放在数据库中,因为它永远不会更改。我仍然希望它在模型中。基本上,我的下拉列表应该提供以下内容:
Value Text
-------------------------------------
Calibration Calibration
Prevent Preventative Maintenance
CalibrationPrevent PM and Calibration
赞赏使用models / oop的静态列表的任何帮助或示例
答案 0 :(得分:1)
您可以使用列表初始值设定项:
public static SomeHelperClass{
public static List<SelectListItem> MaintenanceTypeList {
get {
return new List<SelectListItem>
{ new SelectListItem{Value = "Calibration", Text = "Calibration"}
,new SelectListItem{ Value = "Prevent", Text = "Preventative Maintenance" }
,etc.
};
}
}
}
希望我没有错过任何地方的花括号。您可以谷歌“C#list initializer”获取更多示例。我不记得我的头脑是什么实际的集合是一个SelectListCollection,但我知道有一个DropDownList的重载接受List,因为我经常只有一个keyvaluepairs或其他东西的集合,然后在我的view我将其转换为SelectListItems:someList.Select(i => new SelectListItem { Value = i.Key, Text = i.Value })
请注意,另一个选项是将值放在枚举中。然后,您可以对每个枚举值使用Description属性:
enum MaintenanceType {
[Description("Calibration")]
Calibration = 1,
[Description("Preventative Maintenance")]
Prevent = 2
}
然后你可以做像
这样的事情Enum.GetValues(typeof(MaintenanceType )).Select(m=>new SelectListItem{ Value = m, Text = m.GetDescription()} ).ToList()
最后一行有点偏离头顶,所以希望我没有犯错误。我觉得enum在你想要做的事情上更有条理。