C# MVC下拉列表设置选定值

C# MVC下拉列表设置选定值,c#,asp.net-mvc,C#,Asp.net Mvc,嘿,我已经试着设置dropdownlist的选定值。 在我的控制器中: u.Roles = new List<AspNetRole>(); foreach (var role in db.AspNetRoles) { u.Roles.Add(role); } 但是仍然不工作,我没有得到所选的值。调试时,我可以看到Model.role.Id包含所选的值 还要注意,Id的类型是string,因为它是散列的。 我做错了什么?在MVC中显示下拉列表的方式很少。我喜欢下面的方法 注意

嘿,我已经试着设置dropdownlist的选定值。 在我的控制器中:

u.Roles = new List<AspNetRole>();
foreach (var role in db.AspNetRoles)
{
    u.Roles.Add(role);
}
但是仍然不工作,我没有得到所选的值。调试时,我可以看到Model.role.Id包含所选的值

还要注意,Id的类型是string,因为它是散列的。
我做错了什么?

在MVC中显示下拉列表的方式很少。我喜欢下面的方法

注意:您需要模型中SelectListItem的集合

模型 控制器 看法
这基本上是我推荐的方法,对于不总是预先选择合法值作为默认值的情况,需要进行一些修改。在这些情况下,可以使模型属性为null int?然后将new-SelectListItem{Text=-Select-,Value=}之类的内容添加到列表的顶部。这也适用于DataAnnotations和[Required]。绑定到属性时,不应设置SelectListItem的Selected属性。属性的值决定选择哪个选项,手动设置所选属性只是被忽略HtmlHelper方法会覆盖它,因此其无意义的额外开销感谢您的努力=我喜欢它=您的代码真的没有那么糟糕。。您刚刚错过了告诉SelectList所选值应该是什么的部分。选择listmodel.Roles、Id、Name、Model.role.i您没有做错任何事情。如果Model.role.Id的值与其中一个role.Id值匹配,则将选择该选项。检查生成的html,确保有一个选项的值完全匹配。谢谢,这就是我所需要的=
 @Html.DropDownList(Model.role.Id, new SelectList(Model.Roles, "Id", "Name"), htmlAttributes: new { @class = "form-control"})
public class MyModel
{
    public int SelectedId { get; set; }
    public IList<SelectListItem> AllItems { get; set; }

    public MyModel()
    {
        AllItems = new List<SelectListItem>();
    }
}
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyModel();
        model.AllItems = new List<SelectListItem>
        {
            new SelectListItem { Text = "One",  Value = "1"},
            // *** Option two is selected by default ***
            new SelectListItem { Text = "Two",  Value = "2", Selected = true},
            new SelectListItem { Text = "Three",  Value = "3"}
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
        // Get the selected value
        int id = model.SelectedId;
        return View();
    }
}
@model DemoMvc.Controllers.MyModel
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    @Html.DropDownListFor(x => x.SelectedId, Model.AllItems)
    <input type="submit" value="Submit" />
}