asp.net mvc 3 預選 Html.DropDownListFor 不在書呆子晚餐中工作
了解下拉列表,我試圖在Scott Gu 的部落格中為 nerddinner 添加一個 RSVP 創建頁面,其中包含一個 Html.DropDownListFor 列出可用的晚餐。
我可以填充下拉列表,但無法讓下拉列表預先選擇我想要的值(“樣品晚餐 2”)。我使用初始化器在數據庫中播種一些晚餐對象。該數據庫是使用 EF ‘程式碼優先方法’的 sql ce 4。抱歉,我知道這是 av 常見問題,不想問,但老實說,我在這方面花了很多時間,但無法讓它發揮作用:
視圖模型
public class RSVPViewModel { public SelectList DinnersList { get; set; } public RSVP Rsvp { get; set; } public string SelectedItem { get; set; } }控制器
// //GET: /RSVP/Create public ActionResult Create() { RSVP rsvp = new RSVP(); string selected = "Sample Dinner 2"; var typeList = new SelectList(dbc.Dinners.ToList(), "DinnerID", "Title", selected); var viewModel = new RSVPViewModel { DinnersList = typeList, Rsvp = rsvp, SelectedItem = selected }; return View("Create", viewModel); }看法
@Html.DropDownListFor(model => model.Rsvp.DinnerID, Model.DinnersList)HTML 結果
<select data-val="true" data-val-number="The field DinnerID must be a number." data-val-required="The DinnerID field is required." id="Rsvp_DinnerID" name="Rsvp.DinnerID"> <option value="1">Sample Dinner 1</option> <option value="2">Sample Dinner 2</option> </select>因此,在頁面載入時不會預先選擇值為“Sample Dinner 2”的下拉列表。當我做出選擇並點擊送出時,列表顯示正常並設置了正確的 DinnerID。
也試試這個:
@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)但沒有設置或綁定到 Rsvp.DinnerID。
這從列表中預選但不綁定(或設置 Rsvp.DinnerID)
@Html.DropDownList("DinnersList")我想保留它 mvc3,所以想使用 ViewModel 方法(無 ViewData)實現強類型,最好使用 Html.DropDownListFor(不是 Html.DropDownList)。對於這種情況,Viewbag 似乎沒有必要。
謝謝!
編輯1
認為我應該使用 selectListItems 的 selectList 我嘗試了這種詳細的方法:
RSVP rsvp = new RSVP(); string selected = "2"; List<SelectListItem> dinners = new List<SelectListItem>(); foreach (Dinner dinner in dbc.Dinners.ToList()) { SelectListItem slDinner = new SelectListItem(); slDinner.Value = dinner.DinnerID.ToString(); slDinner.Text = dinner.Title; slDinner.Selected = (slDinner.Value == selected); dinners.Add(slDinner); } var dinnersList = new SelectList(dinners, "Value", "Text", selected); var viewModel = new RSVPViewModel { DinnersList = dinnersList, Rsvp = rsvp, SelectedItem = selected };然而仍然沒有工作。我應該以某種方式使用 @Html.DropDownListFor.. 中的 ViewModel SelectedItem 屬性嗎?就像是 :
@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)但是如何獲得一個選定的值來設置 Rsvp.DinnerID。我認為這叫做綁定。
在閱讀here和here之後,我終於明白了HtmlDropDownlistFor如何根據您的模型自動在下拉列表中選擇正確的項目-在RSVP中選擇一個dineID(dinner.dinnerID的外鍵)將導致包含Dinner.DinnerIDs列表的下拉列表預先選擇那個值。我認為 SelectList 或 ViewModel 中的 selectedValue還不需要。
解決方案:
// //GET: /RSVP/Create public ActionResult Create() { //automatically preselects matching DinnerID in the Dinner dropdownlist var rsvp = new RSVP {DinnerID = 2 }; var typeList = new SelectList(dbc.Dinners.ToList(), "DinnerID", "Title"); var viewModel = new RSVPViewModel { DinnersList = typeList, Rsvp = rsvp}; return View("Create", viewModel); }