【问题标题】:MVC dropdownlist set selected valueMVC 下拉列表设置选定值
【发布时间】:2015-09-21 16:10:10
【问题描述】:

嘿,我尝试了以下设置下拉列表的选定值。 在我的控制器中:

u.Roles = new List<AspNetRole>();
foreach (var role in db.AspNetRoles)
{
    u.Roles.Add(role);
}

在我看来:

 @Html.DropDownList(Model.role.Id, new SelectList(Model.Roles, "Id", "Name"), htmlAttributes: new { @class = "form-control"})

但还是不行,我没有得到选择的值。调试时我可以看到Model.role.Id 包含选定的值。

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

【问题讨论】:

  • 您的代码真的没有那么糟糕。您只是错过了告诉SelectList 所选值应该是什么的部分。 SelectList(Model.Roles, "Id", "Name", Model.role.Id)
  • 你没有做错什么。如果Model.role.Id 的值与Roles.Id 值之一匹配,则将选择该选项。检查您生成的 html,以确保有一个选项的值完全匹配。
  • 谢谢,这就是我所需要的 =)

标签: c# asp.net-mvc


【解决方案1】:

在 MVC 中显示 DropDownList 的方法很少。我喜欢下面的方法。

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

型号

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" />
}

【讨论】:

  • 这基本上是我推荐的方法,在您并不总是将合法值预选为默认值的情况下进行了一些修改。在这些情况下,您可以将 Model 属性设置为可为空 (int?),然后将 new SelectListItem() { Text = "-- Select --", Value =""} 之类的内容添加到列表顶部。这也适用于 DataAnnotations 和 [Required]
  • 在绑定到属性时不应设置SelectListItemSelected 属性。它的属性值决定了选择哪个选项并手动设置 Selected 属性只是被忽略(HtmlHelper 方法会覆盖它,因此它的额外开销毫无意义)
  • 感谢您的努力 =) 我喜欢它 =)
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多