2015-11-02 60 views
1

我有一個視圖,它可以用填充的下拉列表成功呈現。dropdownlistfor幫助器值在返回視圖時不顯示

 List<SelectListItem> listBuildings = new List<SelectListItem>(context.Buildings.Select(b => new SelectListItem { Value = b.ID.ToString(), Text = b.BuildingName, }).ToList()); 
     SelectListItem buildingZeroItem = new SelectListItem() { Value = "0", Text = "Select Building" }; 
     listBuildings.Add(buildingZeroItem); 
     model.Building = listBuildings; 

它正確顯示在瀏覽器中。然後我提交表單後這樣

 @using (Html.BeginForm("Booking", "Common", FormMethod.Post)) 
      { 
       <div class="col-md-6"> 
        @Html.LabelFor(m => m.Building) 
        @Html.DropDownListFor(m => m.Building, Model.Building, new { @class = "form-control", @style = "width:100%;" }) 
       </div> 
      } 

這裏是在控制器後...

   [HttpPost] 
      public ActionResult Booking(BookingViewModel model) 
      { 
       var myVals= model.Building 
      } 

中沒有任何model.Building。我在這裏錯過了非常認真的事情。我有伴隨的文本框,它們的值被傳遞。它只是幫助者值的下拉列表,我找不到。這是爲了驗證。我想知道是否有人可以給我一點解釋,說我哪裏出錯了。謝謝。

+1

您正在使用與包含列表的對象相同的屬性。它應該是這樣的:'@ Html.DropDownListFor(m => m.BuildingId,Model.Buildings,' – markpsmith

+0

並且不要將'buildingZeroItem'添加到你的'SelectList' - 使用'@ Html.DropDownListFor(m => m .BuildingId,Model.Buildings,「Select Building」)'所以它正確地生成一個帶有'null'值的標籤選項 –

回答

3

你需要在你的模型分配將DropDownList的所選元素的值來聲明屬性,如下所示:

public IEnumerable<SelectListItem> Building { get; set; } 
public int SelectedBuildingId { get; set; } 

然後,你需要在DropDownListFor聲明中使用它:

@Html.DropDownListFor(m => m.SelectedBuildingId, Model.Building, new { @class = "form-control", @style = "width:100%;" }) 

您將獲得該屬性中所選元素的值