0

私はASP.NETが初めてで、次のことを達成しようとしています:

私は MVC4 と EF へのコード優先アプローチを使用して開発しています。次のモデルがあります。

public class Booking {
  // Lot of standard int/string attributes

  // And a navigation attribute
  public virtual Teaching teaching {get;set;}
}

教えることは、かなり基本的な別のモデルです。初期化子を使用してデータベースをブートストラップしましたが、すべて問題ありません。EF によって SQL 構造が作成され、Teaching_Id が Booking テーブルに自動的に追加されました。私のモデルも正しく設定されており (遅延読み込みだと思います)、たとえば index ビューで model.Teaching.name を出力できます。

私は現在、データベースに新しい予約を追加する作成フォームを作成しようとしています。ユーザーがリストから教えを選択できるようにしたいと考えています。これまでのところこれを達成することができました。私のビューはかなり標準的です(自動生成):

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

これまでのところ、単純な属性についてです。セレクトリスト用に作りました

私のコントローラーで:

var id = (int)Membership.GetUser().ProviderUserKey;
ViewBag.listTeachings = db.Teachings.Where(x => x.Teacher.UserId == id).ToList();

私の見解では(フォーム内)

 @Html.DropDownListFor(model => model.Teaching.Id, new SelectList(ViewBag.listTeachings, "Id", "Id"))

(テスト目的で、ドロップダウンリストにIDを登録しています)

フォームを POST すると、すべて問題ありません (モデル状態エラーはありません) が、データベースには何も追加されません。私のフォーム POST コンテンツには、Teachings.Id エントリがあります。また、model.Teaching.Id の代わりに DropDownListFor model => model.Teaching を使用しようとしましたが、Teaching エントリが PostData に渡され、純粋な int をオブジェクトに変換する方法がわからないと思います。

読んでくれてありがとう、事前に感謝します!

4

1 に答える 1

0

さて、Create() 関数で渡された私のモデルは効果的に Teaching.Id を含んでいましたが、EF はそれを適切な外部キーなどにマップできなかったようです。

POST Createコントローラーでこのソリューションを使用して機能させました:

 model.Teaching = teachingRepo.Find(model.Teaching.Id);

これが機能しないことに注意してください:

 model.Teaching = new Teaching() { Id = model.Teaching.Id }

(誰かがこれについて説明している場合、私はそれに反対していません)

于 2012-10-26T09:00:46.797 に答える