-1

我有AA html.dropdownlistfor該名單約900項設置預選項目的html.dropdownlistfor

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

第三個參數用於生成'null'標籤選項。不要使用ViewBag(使用視圖模型),你需要將你的下拉列表綁定到模型屬性 - 例如'@ H​​tml.DropDownListFor(m => m.SelectedValue,Model.Options。「Choose ...」,new {..})'。舉例來說,參考[這個DotNetFiddle](https://dotnetfiddle.net/5ewluv) –

回答

1

當您使用Html.DropDownListFor(或任何*For助手)時,該值來自綁定屬性的值。實際上,它比這更復雜一點。該值來自ModelState中的約束屬性的值。

所以,如果你想自動選擇一個項目,然後你需要設置ParentWebContentID您要選擇的值。乾淨利落。但是,一旦發佈了信息,即使您將ParentWebContentID設置爲不同的值,選擇值也始終是發佈的值。還值得注意的是:Request,ViewBagViewData都參與定義ModelState中的值。因此,例如,如果您有一個名爲parentWebContentID(不區分大小寫)的參數,那麼來自請求的值將始終優先於您在模型上明確設置的任何值。