我有一个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变量更改“选择...”但它不起作用。有没有其他方法可以做到这一点?
我找不到任何关于互联网上其他例子的帮助。
答案 0 :(得分:1)
当您使用Html.DropDownListFor
(或任何*For
系列助手)时,该值来自bound属性的值。实际上,它比这复杂一点。该值来自ModelState
中的绑定属性的值。
因此,如果您想要自动选择项目,则需要将ParentWebContentID
设置为您想要选择的值。干净利落。但是,一旦发布帖子,即使您将ParentWebContentID
设置为其他值,选择值也将始终是发布的内容。另外值得注意的是:Request
,ViewBag
和ViewData
都参与定义ModelState
中的值。因此,例如,如果您的操作具有名为parentWebContentID
的参数(不区分大小写),则请求中的该值将始终优先于您在模型上明确设置的任何值。