MVC3 Scaffolding不会在存在外键的视图中生成下拉列表

时间:2012-09-28 22:50:15

标签: asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-5

这让我发疯,我已经研究过StackOverflow上的相关帖子。

基本上我有2个表,Album和Genre,前者有Genre的外键。我在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>

所以我真的很困惑。任何想法都将不胜感激。

谢谢,

P.S。我正在使用ASP.NET MVC 3 Tools Update运行VS2010 SP1,因为我试图安装它,它说它已经安装了。

1 个答案:

答案 0 :(得分:1)

是啊......啊!我已经让它与MS Scaffold合作了。现在我需要弄清楚如何。我认为问题在于我使用的是Model First,我需要确保将额外的外键属性添加到模型中,而不仅仅是在Domain Class代码中,它需要在EDMX中。但是,这会产生另一个问题,即现在在SQL Server中创建了2个字段,一个来自Navigation属性,另一个来自此字段。我可能需要使用映射。我会

生成的控制器代码:

    // 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>

这就是我想要的。显然,如果有人希望对此发表评论那么好,但确实有效。

感谢。