2017-05-02 37 views
1

我有這樣的選擇列表的:MVC中,選擇列表的選擇對象值

控制器:

ViewBag.SagId = new SelectList(db.Sags, "Id", "Emne", 7); 

名單,一切都會按suposed,但所選擇的值不是== 7,

查看:

@Html.DropDownListFor(x => x.SagId,(IEnumerable<SelectListItem>) ViewBag.SagId, 
new 
{ 

    @class = "selectpickers", 
    data_show_subtext = "true", 
    data_live_search = "true" 

}) 

它可能是我錯過了一些愚蠢的東西?

+0

模型綁定通過綁定到您的屬性的值工作。在將模型傳遞給視圖之前,在GET方法中將'SagId'的值設置爲'7',並將其選中。當你綁定到一個屬性 –

+0

時,'SelectList'構造函數的第4個參數被忽略,我不希望它總是7,只是一個測試希望它是一個int,它可以根據他們訪問的網站而改變。 – user3759748

+0

實際值是什麼並不重要。你需要設置屬性'SagId'的值,如果它匹配其中一個選項值,它將被選中(否則第一個選項將被選中,因爲必須是) - 這就是模型綁定的工作原理。 –

回答

0

模型綁定通過綁定到模型屬性的值來工作。在將模型傳遞給視圖之前,您需要在控制器中設置屬性SagId的值。

你在你的控制器方法的代碼應該是這樣的

var model = new YourModel() 
{ 
    SagId = 7 
}; 
ViewBag.SagId = new SelectList(db.Sags, "Id", "Emne"); 
return View(model); 

請注意,有沒有點設置了第四個參數的構造函數SelectList。綁定到模型屬性時忽略它,因爲DropDownListFor()方法內部構建自己的IEnumerable<SelectListItem>,並根據綁定屬性的值設置Selected屬性。

還請注意,你不應該使用相同的名稱爲您的結合(參見Can the ViewBag name be the same as the Model property name in a DropDownList?)的財產,我強烈建議您使用視圖模型,尤其是當編輯,而視圖模型將包含一個屬性public IEnumerable<SelectListItem> SagList { get; set; }和在視圖中將是@Html.DropDownListFor(m => m.SagId, Model.SagList, new { ... })