0

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

   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

任何使用模型 / oop 的静态列表的帮助或示例表示赞赏

4

1 回答 1

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# 列表初始化程序”以获取更多示例。我不记得 SelectListCollection 的实际集合是什么,但我知道有一个接受 List 的 DropDownList 的重载,因为我经常只有一个键值对或其他东西的集合,然后在我的查看我将其转换为 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()

最后一行有点离题,所以希望我没有犯错。我觉得枚举对于你想要做的事情来说结构更好。

于 2013-05-17T17:51:33.950 回答