2015-08-26 19 views
0

現在,我正在嘗試爲使用下拉列表的MVC應用程序創建編輯頁面,允許用戶編輯員工的位置。我考慮兩種情況:一種情況是員工沒有設置地點,另一種情況是員工已有指定地點。在第二種情況下,我希望編輯頁面中的下拉列表自動在列表中選擇當前位置。該列表已成功創建,但默認爲SelectList中的第一個值(本例中爲空字符串),而不是當前選定的值。這種情況下,控制器代碼如下:在MVC/EF應用程序中的DropDownList中未選擇任何項目

var pairs = db.Locations.Select(x => new { value = x.LocationID, text = x.City }).ToList(); 
      pairs.Insert(0, (new {value = 0, text = ""})); 
      SelectList Locations = new SelectList(pairs, 
      "value", "text", pairs.First(x=> x.value == employee.Location.LocationID)); 
      foreach (SelectListItem item in Locations) 
      { 
       item.Selected = false; 
      } 
      foreach (SelectListItem item in Locations) 
      { 
       if (item.Value == (employee.Location.LocationID.ToString())) 
       { 
        Debug.Print("Match Found"); 
        item.Selected = true; 
        break; 
       } 

      } 

      ViewBag.Locations = Locations; 

需要注意的是,現在,我明確地列舉在列表中,並作爲選擇標記所需的值。最初,我使用了帶有「selectedValue」參數的SelectList構造函數的重載,但是這也不起作用。還要注意print語句:在運行時,確實會打印該行,表示找到並標記了匹配的值。它只是不顯示在頁面上。

視圖中的代碼如下:

<div class="form-group"> 
     @Html.Label("Location", new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("location", ViewBag.Locations as IEnumerable<SelectListItem>) 
     </div> 
    </div> 

有沒有辦法,我失去了一些東西?

謝謝!

+1

這也許回答可以幫助你http://stackoverflow.com/questions/27297294/how -to-set-default-value-for-html-dropdownlistfor-in-mvc –

+0

您是否試過只是在做: @ Html.DropDownList(「location」,ViewBag.Locations) –

+0

您是否在使用模型?該模型是否有稱爲「位置」的字段?如果是這樣,那可能會導致這個問題。 –

回答

1

我敢肯定,你可以大大簡化你的代碼,並得到相同的結果,你想要的。

您可以在控制器

var Locations = new SelectList(db.Locations, "LocationID", "City"); 
ViewBag.Locations = Locations; 

並在您的視圖中使用這個只是用DropDownListFor

@Html.DropDownListFor(m => m.Location.LocationID, (SelectList)ViewBag.Locations) 
+0

不需要'SelectList'構造函數中的最後一個參數(當綁定到一個屬性時忽略它) - 但是如果'Location'是一個包含'LocationID'的複雜屬性,那麼它需要是'@ Html.DropDownListFor(m => m.Location.LocationID,(SelectList)ViewBag.Locations)' - OP沒有顯示模型,所以不能確定 –

+0

^true ..我會更新它.. – JamieD77

相關問題