为html.dropdownlistfor设置预选项

时间:2016-06-21 11:54:36

标签: asp.net-mvc twitter-bootstrap entity-framework html.dropdownlistfor

我有一个html.dropdownlist,其列表大约有900个项目

Html.DropDownListFor(m => m.ParentWebContentID, null, "Choose...", htmlAttributes: new { @class = "form-control" })

我希望它有一个预先选择的项目,并认为第三个参数(“选择...”)是为此。

所以我安排了一个ViewBag变量来保存一个值(ChosenParentWebContentId) 像这样

public ActionResult Create(int? id)
        {
            if (!AccountController.IsInRole(System.Web.HttpContext.Current.User.Identity.Name, "admin"))
            {
                return RedirectToAction("Index");
            }

            ViewBag.ParentWebContentID = GetWebContentListwithGroup(null);
            if(id != null)
            {
                ViewBag.ChosenParentWebContentID = db.WebContent.FirstOrDefault(x => x.WebContentID == id).ParentWebContentID;
            }

            ViewBag.WebContentTypeID = db.WebContentType.ToList();
            ViewBag.ContentTypeID = id;
            ViewBag.LanguageCode = new SelectList(db.WebLanguage, "LanguageCode", "DisplayName");
            ViewBag.CreatedByUserID = new SelectList(db.AspNetUsers, "Id", "Email");
            ViewBag.LastEditedByUserID = new SelectList(db.AspNetUsers, "Id", "Email");

            ViewBag.DetailList = db.WebContentDetail.Where(x => x.WebContentID == id).ToList();
            return View();
        }

我尝试使用ViewBag变量更改“选择...”但它不起作用。有没有其他方法可以做到这一点?

我找不到任何关于互联网上其他例子的帮助。

1 个答案:

答案 0 :(得分:1)

当您使用Html.DropDownListFor(或任何*For系列助手)时,该值来自bound属性的值。实际上,它比这复杂一点。该值来自ModelState 中的绑定属性的值。

因此,如果您想要自动选择项目,则需要将ParentWebContentID设置为您想要选择的值。干净利落。但是,一旦发布帖子,即使您将ParentWebContentID设置为其他值,选择值也将始终是发布的内容。另外值得注意的是:RequestViewBagViewData都参与定义ModelState中的值。因此,例如,如果您的操作具有名为parentWebContentID的参数(不区分大小写),则请求中的该值将始终优先于您在模型上明确设置的任何值。