下拉列表MVC的静态数据列表

时间:2013-05-17 16:39:11

标签: asp.net-mvc html.dropdownlistfor

我希望在模型中有一个静态的数据列表,可以在视图模型和视图中使用下拉列表。我希望能够在我的控制器中以这种方式使用它:

   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的静态列表的任何帮助或示例

1 个答案:

答案 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在你想要做的事情上更有条理。