1

這讓我瘋狂,而且我已經研究了StackOverflow上的相關帖子。MVC3腳手架不會在存在外鍵的視圖中生成下拉列表

基本上我有2個表,專輯和流派與前者有一個外來類型的外鍵。我在EF5中使用Model First進行了建模,並使用MS的T4生成器生成了上下文和類文件。因此,我的域名類別代碼:

{ 
using System; 
using System.Collections.Generic; 

public partial class Album 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public decimal Price { get; set; } 
    public string AlbumArtUrl { get; set; } 

    public int GenreId {get; set;} 
    public virtual Genre Genre { get; set; } 
} 
} 

你會發現,我已經加入:

public int GenreId {get; set;} 

按照指導序,使腳手架創建視圖的下拉菜單和「的SelectList」代碼控制器。但它不!然而,它確實創造了,在視圖中:

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

所以我真的很困惑。任何想法將不勝感激。

感謝,

埃德

附:我使用ASP.NET MVC 3工具運行VS2010 SP1更新它似乎,因爲我試圖安裝它,它說它已經安裝。

+0

我並不完全遵循這裏...您是否期​​望SelectList屬性也會在Domain Class中爲您生成? – Dmitry

+0

不,應該在控制器的創建和編輯操作中生成SelectList。另外,應該在視圖中指定HTML.DropDownListFor。我剛剛嘗試過關閉Nuget的Steven Sanderson的MVCScaffolding包,並且這種方法的工作方式與Domain規範相同,儘管我現在正在獲取數據庫更新異常,但似乎找不到我的外鍵值,但我使用正確的鍵獲取了DropDown值。我寧願讓標準MS腳手架工作。非常感謝您的回覆。 – EdB

回答

1

yee ... aah !!!我已經與MS腳手架合作。現在我需要弄清楚如何。我相信這個問題是因爲我使用Model First,而且我需要確保將額外的外鍵屬性添加到模型中,而不僅僅是添加到Domain Class代碼中,它需要放在EDMX中。但是,這會產生另一個問題,即現在在SQL Server中創建了兩個字段,一個來自導航屬性,另一個來自此字段。我可能需要玩這個映射。我會產生

控制器代碼:

// GET: /Album/Create 

    public ActionResult Create() 
    { 
     ViewBag.GenreId = new SelectList(db.Genre, "Id", "Name"); 
     return View(); 
    } 

相關查看代碼:

<div class="editor-label"> 
     @Html.LabelFor(model => model.GenreId, "Genre") 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownList("GenreId", String.Empty) 
     @Html.ValidationMessageFor(model => model.GenreId) 
    </div> 

這就是我想要的。很顯然,如果有人願意對此發表評論,那麼很棒,但確實有效。

謝謝。

+0

進一步的評論。我相信我們需要在EDMX中定義參考約束,並使映射正確。 – EdB