【问题标题】:Html.DropdownList with selected value具有选定值的 Html.DropdownList
【发布时间】:2017-04-11 13:45:08
【问题描述】:

我有一个通过 ViewBag 变量填充的下拉列表,我想知道如何使用 id 值设置此列表的选定索引。

这是我创建 ViewBag 变量的地方,注意 id,这是我想用来设置列表中默认选中项的地方:

 var events = db.Events.Select(e => new
            {
                id = e.EventID,
                Name = e.EventTitle

            }).OrderBy(e => e.Name).ToList();
            ViewBag.EventsList = new MultiSelectList(events, "id", "Name");

这是视图中的下拉菜单:

 @Html.DropDownList("id", (MultiSelectList)ViewBag.EventsList, new { @class = "form-control", id = "lstTopFeaturedEvent" })

我是否可以使用控制器中设置的 id 属性设置默认选择值?

【问题讨论】:

  • 在将模型传递给视图之前,在GET方法中设置属性id的值(你可以简单地使用ViewBag.EventsList = new SelectList(db.Events, "EventID", "EventTitle");

标签: asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

您应该使用视图模型并忘记ViewBag 把它想象成它不存在。你会看到事情会变得多么容易。所以定义一个视图模型:

public class MyViewModel
{
    public int SelectedCategoryId { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; } 
}

然后从控制器填充这个视图模型:

public ActionResult NewsEdit(int ID, dms_New dsn)
{
    var dsn = (from a in dc.dms_News where a.NewsID == ID select a).FirstOrDefault();
    var categories = (from b in dc.dms_NewsCategories select b).ToList();

    var model = new MyViewModel
    {
        SelectedCategoryId = dsn.NewsCategoriesID,
        Categories = categories.Select(x => new SelectListItem
        {
            Value = x.NewsCategoriesID.ToString(),
            Text = x.NewsCategoriesName
        })
    };
    return View(model);
}

最后在您看来,使用强类型的DropDownListFor 助手:

@model MyViewModel

@Html.DropDownListFor(
    x => x.SelectedCategoryId,
    Model.Categories
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2017-12-21
    • 2011-12-26
    相关资源
    最近更新 更多