将我的List <Roomtype>转换为ASP的SelectList.NET MVC DropDownFor <>,并为每个选项获取正确的值

Ale*_*lex 5 c# asp.net asp.net-mvc html-helper

我上课了RoomType:

Int32 Id
String Name
String ColorCode
Run Code Online (Sandbox Code Playgroud)

我的viewmodel得到一个List<Roomtype> RoomTypes应该在下拉列表中显示的内容.

每个下拉选项都应该具有:1)作为标题Name,2)作为值Id,以及3)样式背景颜色#ColorCode.

我的问题是如何正确地将此列表转换List<SelectListItem>为ASP.NET MVC的DropDownFor帮助程序所需的,然后为每个选项插入正确的值.

我试图在我的viewmodel中有一个新的readonly属性,它有一个RoomtypeSelectList返回的getter ,new SelectList(RoomTypeList)但是我无法显示正确的属性(Name,Id,Background color).

我很欣赏一些正确方向的帮助或指示......

Luk*_*uke 9

在视图中尝试这样的事情

 <%=Html.DropDownList("userList", new SelectList((IEnumerable)ViewData["RoomTypes"], "Value", "Text",selectedValue)) %>
Run Code Online (Sandbox Code Playgroud)

在你的控制器动作中你有

 List<SelectListItem> roomTypesSelect = new List<SelectListItem>();

    IList roomTypes = RoomTypeManager.GetAllRoomTypes();
    RoomTypes currentRoomType = RoomTypeManager.GetCurrentRoomType();
    bool isSelected = false;
    foreach (RoomTypes roomTypes in roomTypes)
    {
    if (currentRoomType.Id == roomTypes.Id)
       isSelected = true;
    else
        isSelected = false;

    roomTypes.Add(new SelectListItem { Text = roomTypes.Name + " " +roomTypes.ColourCode, Value = roomTypes.Id, Selected = isSelected });
    }

    ViewData["RoomTypes"] = roomTypes;
Run Code Online (Sandbox Code Playgroud)


wom*_*omp 2

内置的 html 帮助器方法不允许您为选择列表项生成样式或标题属性。

如果要添加这些属性,则需要创建自己的 html 帮助器方法,或者仅使用<% foreach ... %>.