2009-05-16 10 views
4

私は、製品とファミリの種類のエンティティデータモデルを持っています。各製品には1つのファミリがあります。厳密に型指定されたASP.NET MVCのDropDownListでEntityオブジェクトのナビゲーションプロパティを使用するにはビューの作成と編集?

私はこのモデルをASP.NET MVC Webサイトで使用しています。製品のコントローラの[ビューの作成と編集]で[ファミリ]ドロップダウンリストが必要です。

厳密に型指定されたASP.NET MVCのドロップダウンリストでエンティティオブジェクトのナビゲーションプロパティを使用するにはビューの作成と編集?

次のコードが失敗した...

ProductController:

// POST: /Product/Create 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Product p) 
{ 
    db.AddToProduct(p); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
} 

は、ビューを作成します。

<p> 
    <label for="Family">Family:</label> 
    <%= Html.DropDownList("Family", new SelectList((IEnumerable)ViewData["Families"], "Id", "Name"))%> 
    <%= Html.ValidationMessage("Family", "*")%> 
</p> 

私はFormCollectionを使用せずにこれを行うことができますか?私はむしろ強く型付けされた製品を保つことにします。

答えて

0

あなたのバインディングを作るために外部キーを使用することはできません、現在の状態では

<%= Html.DropDownList("Family", new SelectList(model.Families, "Id", "Name"))%> 
1

製品はFamilies性質を持っている(またはForeingキー制約とLINQのエンティティである)と仮定すると。 製品とファミリの関係を手動で更新する必要があります。そのためには、postidアクションにfamilyidパラメータを追加する必要があります。 そして、family.Where(f => f.id = famylyId)にproduct.familyを割り当てます。

1

参照リストを戻すには、エンティティオブジェクト以外のものが必要です。私はあなたがViewDataコレクションバッグから選択リストを取得しているのを見ていますが、それは入っていません。ViewDataまたはViewModelオブジェクトに入っている限り、問題ありません。

あなたの外部キーに関する部分に...アレックスとして、EFの現在のレボは単純なプロパティとしての外部キーの直接の公開をサポートしていないと述べました。私はこれが2.0で変わるように設定されていると信じていますが、その間に外部キーのプロパティを偽装するための検索を行います(SOはまだリンクを投稿できません)。わたしにはできる。

関連する問題