Create Labels and Values for HTML DropDownList in

2019-06-06 09:19发布

I have the following, which posts "IT" and "HR" as values in model. I want IT and HR as Label, and 0 and 1 as values to controller.

@Html.DropDownList("DepartmentId", new SelectList(new[] { "IT", "HR" }))

And when i get the view, how can i have pre-selected value in the dropdown with the matching value in Department ID in model. So if an item has Id as HR, the dropdown should already have HR as selected, and then a person can change it to IT, and that option can be saved.

Any Help ?? Please note i don't want to change my model.

ANSWER Big Thanks to Terry Nederveld for giving this answer :

 @Html.DropDownList("DepartmentId", new SelectList(new[] { new KeyValuePair<string, int>("IT", 1), new KeyValuePair<string, int>("HR", 2) }, "Value", "Key", (Model.ServiceItem.DepartmentId.Equals(1) ? 1 : 2)))

3条回答
ら.Afraid
2楼-- · 2019-06-06 09:56

Assuming you're using MVC3/4, the easiest way is to add a 'Departments' property to your model. Then you can do this in your view:

@Html.DropDownListFor(m => m.Department.DepartmentId, Model.Departments) 

With your model looking like this:

public class ViewModel
{
    public List<SelectListItem> Departments
    {
        get;
        private set;
    }

    public Department Department { get; set; }


    public ViewModel()
    {
        Departments = new List<SelectListItem>();
        //Assume you'll be getting the list from db here?
        Departments .Add(new SelectListItem { Text = "HR", Value = "IdValueHere" });
        Departments .Add(new SelectListItem { Text = "IT", Value = "IdValueHere" });
    }
}

This takes care of selecting the correct item.

查看更多
一纸荒年 Trace。
3楼-- · 2019-06-06 10:04

See the response from eudaimos (about 50% of way down replies) here for a solution

查看更多
做自己的国王
4楼-- · 2019-06-06 10:08

David Masters approach is the one that I use normally. But since you don't want to change the Model. Here is one approach that will work:

@Html.DropDownList("Departments", new SelectList(new [] { new KeyValuePair<string, int>( "IT", 0 ), new KeyValuePair<string, int>( "HR", 1 )},"Value", "Key")) 
查看更多
登录 后发表回答