1

これは私を夢中にさせており、StackOverflow の関連記事を調べました。

基本的に、Album と Genre の 2 つのテーブルがあり、前者には Genre への外部キーがあります。EF5 の Model First を使用してこれをモデル化し、MS の T4 ジェネレーターを使用してコンテキスト ファイルとクラス ファイルを生成しました。したがって、私の Domains Class コードは次のとおりです。

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

だから私は本当に困惑しています。どんなアイデアでも大歓迎です。

ありがとう、

エド

PS ASP.NET MVC 3 Tools Update を使用して VS2010 SP1 を実行しています。インストールしようとしたところ、既にインストールされていると表示されたためです。

4

1 に答える 1

1

うん...ああ!!! 私はそれをMSScaffoldで動作させました。今、私はその方法を理解する必要があります。問題は、Model Firstを使用しているという事実にあると思います。ドメインクラスコードだけでなく、モデルに追加の外部キープロパティを追加する必要があり、EDMXにある必要があります。ただし、これにより、SQL Serverで2つのフィールドが作成されるという別の問題が発生します。1つはNavigationプロパティから、もう1つはこのフィールドから作成されます。マッピングを試す必要があるかもしれません。私はそうします

生成されたコントローラーコード:

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

これが私が欲しかったものです。明らかに、誰かがこれについてコメントしたいのであれば、それは素晴らしいことですが、それは機能します。

ありがとう。

于 2012-09-29T00:56:55.967 に答える