では、次のシナリオを持っていると言う結合モデル:ASP.NET MVC2、LINQ-TO-SQL関係の実体を、選択リスト、
- 表:国。列:国ID、国名
- テーブル:州;列:StateID、StateName、国ID(外部キー)
- テーブル:地域;コラム:MVCでLocalityID、LocalityName、STATEID(外部キー)
、あなたが、例えば、リンクされている外部エンティティを呼び出すことができるように、コードで自動生成されたLINQ-TO-SQLクラスマップの関連付けの関係という素敵です
<% foreach (var locality in Model.Localities) { %>
<tr>
<td>
<%: locality.LocalityName %>
</td>
<td>
<%: locality.State.StateName %>
</td>
<td>
<%: locality.State.Country.CountryName %>
</td>
</tr>
<% } %>
これは、私がインデックスアクションを参照すると、正常にレンダリングされます。
ただし、編集操作に問題があります。ここでは、コードがあります:
<strong>Locality Name</strong>
<div class="editor-field">
<%: Html.TextBox("LocalityName", Model.Locality.LocalityName) %>
<%: Html.ValidationMessage("LocalityName")%>
</div>
<strong>Country</strong>
<div class="editor-field">
<%= Html.DropDownList("CountryID", Model.CountriesDDL, "-- select --") %>
</div>
<strong>State</strong>
<div class="editor-field">
<%= Html.DropDownList("StateID", Model.StatesDDL, "-- select--") %>
<%: Html.ValidationMessage("StateID")%>
</div>
最初、私は(STATEIDのため)状態のSelectListの隣に検証エラーを前記どのきた時に、例えば、「8が有効な値ではありません。」だから、それは更新していません。
多くの投稿(such as this one)を読むと、IDを設定して関係を更新するデータベース関連の問題があり、解決策が代わりにENTITYを設定するように見えることがわかりました。 (ちなみに、逆の助言もまたhereが出ます)。このアドバイスに続いて、私は、Html.DropDownList()のオーバーロードを見て、オブジェクト自体にリストアイテムの "値"を設定し、Object.Nameに "text"プロパティを設定しました - これを解決していませんまだ。しかし、この取り組みがより多くの時間を費やしているので、私は非常にいくつかの専門家のアドバイスをいただければ幸いです。
したがって、私の質問は次のとおりです。そして、SelectListをこのように(そしてどのようにして)提案することが可能ですか?
ありがとうございます。
Tim。
"Locality.State.Country.CountryName"を呼び出す代わりに、LocalityViewModelクラスに "Locality.State.Country"を返す文字列 "CountryName"を定義することを意味しますか? "Model.CountryName"としてビューに渡されます。 – Hanshan
あなたのケースでは、ViewModel - 単純なクラス - CountryID、StateID、LocalityName、およびいくつかの "ヘルパー" IEnumerables(国、州)を持つでしょう。通常、私はビューモデルに2つのメソッドを追加します.1)エンティティクラスを受け取ってビューモデルからのデータで埋めます。2)エンティティクラスとリポジトリを受け取り、ViewModelをエンティティから取得し、リポジトリからヘルパーリストを埋め込むInit。このようにして、コントローラはModelStateが有効かどうかをチェックし、すべての汚い作業をビューモデルにアンロードします。 – Gidon
問題を解決するために必要な情報を提供しました。それは華麗です - ありがとう、仲間!関連するエンティティを更新する作業を行うためにviewmodelクラスを呼び出すことで、パターンを実装しました。治療をしなさい! – Hanshan