2012-07-14 259 views
1

我已經嘗試了整整一天,但下拉列表我加載失敗。它應該是一個簡單的應用程序。我需要創建一個新的Employee,而創建視圖使用StoresMst表中的不同[Store Names]填充下拉列表。這個想法是將員工與商店聯繫起來。下面是我的代碼MVC3 - DropDownListFor不填充

在ViewModel類

public class EmployeeStoreViewModel 
    { 
     private JCOperationsDataContext db = new JCOperationsDataContext(); 

     //public Employee employee { get; set; } 
     public IEnumerable<SelectListItem> Stores { get;set;} 
     public int storeID { get; set; }   
    } 

在創建ActionLink的

 public ActionResult Create() 
     { 
      //ViewData["PartialStores"] = repository.GetStoreNames(); 
      var model = new EmployeeStoreViewModel() 
      { 
       //Stores= jc.StoreMsts.OrderBy(o=> o.StoreID).ToList<SelectListItem>(); 

       Stores = jc.StoreMsts 
         .ToList() 
         .Select(x => new SelectListItem 
         { 
          Text = x.StoreID.ToString(), 
          Value = x.StoreName 
         }),       
      }; 

      return View(model); 
     } 

在View(添加一個參考模型視圖類

<div class="editor-field"> 
    @{Html.DropDownListFor(model => model.storeID, new SelectList (Model.Stores));} 
</div > 

該頁面加載沒有錯誤,但沒有DropDownbox呈現和填充。我缺少什麼?我正在使用MVC 3與VS2010 Ultimate 只是一個說明:我嘗試了與MVC2相同,並確實工作。

回答

2

去掉DropDownListFor調用中的大括號。在您的代碼中,剃鬚刀將其視爲常規方法調用,並忽略該方法的返回值。使用剃鬚刀輸出html的正確語法如下。

<div class="editor-field"> 
    @Html.DropDownListFor(model => model.storeID, new SelectList (Model.Stores)) 
</div > 
+0

真棒傢伙,這工作。謝謝您的回覆 – 2012-07-14 13:21:22

0

因爲你有你的商店在您的視圖模型對象,和你設置該集合傳遞之前,你並不需要使用一個「新的SelectList」,你可以直接引用該財產集合。此外,你不需要在你的下拉列表中使用大括號,它不會以這種方式進行評估。這應該是所有你需要:

<div class="editor-field"> 
@Html.DropDownListFor(model => model.storeID, Model.Stores); 
</div > 

編輯:在您的代碼再次尋找後,如果您的下拉列表中不加載這種方式,您可能需要收集類型更改爲一個列表,而不是IEnumerable的。