NHibernateでMVC3を使用すると、ドロップダウンに問題が発生します。ユーザー入力用のさまざまなフィールドを持つフォームがあり、特定の選択要素でのみ問題が発生しています。
私の問題は、モデルがバインドされてポストに適切に保存されていても、ビューが読み込まれたときにモデルのプロパティの値が選択されたものとして表示されないことです。これを奇妙なものにしているのは、MainPopulationFocus(以下のコードスニペット)ドロップダウンが正しく機能するのに対し、MilitaryServiceドロップダウンは機能しないことです。
モデル-問題のプロパティの宣言
public virtual System.Int32? MilitaryService { get; set; }
public virtual System.Int32? MainPopulationFocus { get; set; }
表示-兵役ラベルとドロップダウン
@Html.LabelFor( m => m.MilitaryService, "Military Service" )
@Html.DropDownListFor(m => m.MilitaryService, ViewBag.MilitaryService as IQueryable<SelectListItem>, "", new { style = "width: 140px" })
HTML
<label for="MilitaryService">Military Service</label>
<select id="MilitaryService" name="MilitaryService" style="width: 140px">
<option value=""></option>
<option value="1028">Active</option>
<option value="1029">Reserve</option>
<option value="1030">National Guard</option>
<option value="1031">Retired Military</option>
</select>
同じビュー-主要な人口フォーカスラベルとドロップダウン
@Html.LabelFor( m => m.MainPopulationFocus, "Main Population Focus" )
@Html.DropDownListFor(m => m.MainPopulationFocus, ViewBag.MainPopulationFocuses as IQueryable<SelectListItem>, "", new { style = "width: 140px" })
HTML
<label for="MainPopulationFocus">Main Population Focus</label>
<select data-val="true" data-val-number="The field MainPopulationFocus must be a number." id="MainPopulationFocus" name="MainPopulationFocus" style="width: 140px">
<option value=""></option>
<option value="808">Education</option>
<option value="809">Policy</option>
<option selected="selected" value="810">Clinical Practice</option>
<option value="811">Research</option>
</select>
コントローラ-サービスレイヤーからオブジェクトのリストを取得し、リストをViewBagに保存します
.Select(s => new SelectListItem() { Text = s.Display, Value = s.ID.ToString(), Selected = (s.ID == fellowsProfile.MilitaryService) });
MainPopulationFocusドロップダウンは、選択されたMilitaryServiceドロップダウン値がモデルにバインドされてDBに保存されている間は完全に機能しますが、ビューの読み込み時に選択された値は表示されません。
モデルとドロップダウンに同じ名前を使用すると問題が発生することはわかっていますが、それは避けました。それはおそらく私がリストを作成した方法に関係していると思います。
可能なヘルプ/提案をありがとう。