选择mvc 4下拉默认值

Alt*_*ami 5 c# asp.net-mvc razor asp.net-mvc-4

我想在下拉列表中选择默认值,其中policyId = 7但它没有选择该值,我做错了什么?

控制器:

var pm = new ManagerClass();
IEnumerable<myClass> po = pm.GetDataFromDb();
IEnumerable<SelectListItem> Policies = new SelectList(po, "PolicyID", "PolicyName", new { PolicyID = 7 });
ViewBag.Policies = Policies;
Run Code Online (Sandbox Code Playgroud)

视图:

@Html.DropDownListFor(m => m.PolicyID, ViewBag.Policies as IEnumerable<SelectListItem>, new { @class = "dropdown-field"})
Run Code Online (Sandbox Code Playgroud)

mat*_*mmo 8

这是因为它实际上没有选择中的值SelectList.

首先,为了使它更好,将项目放在视图模型中以防止强制转换(这也是更好的做法):

public class MyModel
{
    public int PolicyID { get; set; }
    public List<SelectListItem> Policies { get; set; }
    //rest of your model
}
Run Code Online (Sandbox Code Playgroud)

然后填充它:

var model = new MyModel();
model.Policies = po
    .Select(p => new SelectListItem
    {
        Text = p.PolicyName,
        Value = p.PolicyID.ToString(),
        Selected = p.PolicyID == currentPolicyId //change that to whatever current is
    })
    .ToList();
Run Code Online (Sandbox Code Playgroud)

然后在你看来,做:

@Html.DropDownListFor(m => m.PolicyID, Model.Policies, new { @class = "dropdown-field"})
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 7

只需将PolicyID视图模型上的属性设置为您要预选的值:

var pm = new ManagerClass();
var po = pm.GetDataFromDb();
ViewBag.Policies = new SelectList(po, "PolicyID", "PolicyName");

viewModel.PolicyID = 7;
return View(viewModel);
Run Code Online (Sandbox Code Playgroud)

由于DropDownList绑定到PolicyIDproperty(m => m.PolicyID),因此在决定要预选哪个元素时将使用其值.