2011-04-17 74 views
8

我玩與在Asp.net MVCMVC 3 - 腳手架下拉列表

我對國家

public IEnumerable<SelectListItem> Countries { get; set; } 

在我的視圖模型的屬性然而,腳手架,當我創建一個查看並指定它不支持下拉列表的視圖模型,如我預期的那樣。事實上它完全被忽略了。

我已經在這樣做之前編制的項目

我也嘗試添加一個屬性,這樣

public int CountryId { get; set; } 

正如本文認爲存在一種在工作

http://blog.stevensanderson.com/2011/01/28/mvcscaffolding-one-to-many-relationships/

公約我正在使用添加視圖選項,當你右鍵點擊ac時控制器操作方法

任何想法是什麼錯?

回答

5

在我目前的項目中,我遇到了這個問題,無法找到一個快速的方法來在我的一個實體內搭建一對多關係的下拉列表。

我最終什麼事做是這樣的:

1-創建正常AddView =>創建方式。

2 - 如果我在我的模型類ID屬性,則defaul;噸模板會產生這樣的事情來代表這個屬性在我看來:

<div class="editor-label"> 
       @Html.LabelFor(model => model.CityID) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.CityID) 
       @Html.ValidationMessageFor(model => model.CityID) 
</div> 

3-現在我需要更換這個

IEnumerable<SelectListItem> cityItems = dataContext.Cities.AsEnumerable().Select(c => new SelectListItem() 
      { 
       Text = c.Name, 
       Value = c.ID.ToString(), 
       Selected = false, 
      }); 
      SelectList cityList = new SelectList(cityItems, "Value", "Text"); 
      ViewBag.CityList = cityList; 

這將獲取城市表,並創建一個選擇列表的我可以通過我的看法,並使用它爲用戶提供DrobDown:有工作的一個默認模板,所以我在CREATE方法寫了這個代碼它的項目。

4-由一個類似如下取代在我看來,默認代碼:

<div class="Post-label"> 
         <div class="editor-label"> 
          @Html.LabelFor(model => model.CityID) 
         </div> 
         <div class="editor-field"> 
          @Html.DropDownListFor(m => m.CityID, ViewData["CityList"] as SelectList) 
          @Html.ValidationMessageFor(model => model.CityID) 
         </div> 
</div> 

我用ViewData["CityList"]代替ViewBag.CityList的原因是,這一個工作,但其他沒有。

5-現在我的視圖正在查找並正在獲取City數據,就像我期望的那樣,並且在我的Edit視圖中使用相同的模型也導致了工作。

試試看,讓我知道發生了什麼,謝謝。

+0

感謝您的回覆。我知道如何手工編寫代碼,我只是想了解爲什麼自動腳手架不適用於這種情況 – ChrisCa 2011-04-17 12:51:19

1

爲了必須選擇一個國家,一個下拉選擇模型中的屬性應該是:

public Country Country{ get; set; }由EF使用導航屬性,不涉及到數據庫的

public Country CountryId{ get; set; } 創建的人物表的外鍵

一個人的每個實例/記錄都與一個國家相關聯:通過代碼和數據庫的CountryID通過導航屬性定義該關係。 的scaffholding模板然後將生成的編輯/使用create方法和觀點:

ViewBag.PossibleCountries 

Here's a similar scenario.

4

我注意到,對於給定的模式,創建一個新的控制器時,「創建」腳手架生成的代碼與在現有控制器中右鍵單擊並說「添加視圖」並選擇「創建」腳手架模板不同。在第一種情況下,假定你有子類中

public Country Country {get;set;} 
public int CountryID {get;set;} 

那麼這種情況下(與MVC腳手架讀/寫和適當的模型類中添加控制器)正確的屬性會產生@ Html.DropDownList父關係,而在控制器的Create方法中右鍵單擊不會支撐下拉列表,而是會爲該關係創建@ Html.EditorFor。

所以如果你想腳手架代碼生成下拉的答案可能是刪除並重新創建你的控制器,如果可能的話,否則手動添加在適當的代碼。