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