2017-02-09 5 views
0

誰かが私が現在持っているような問題を経験したことがあるのだろうかと思っていました。DropDownListForの問題

コントローラー:

_OpsAdminViewModel.userRoleID = _OpsAdminViewModel.retrieveHighestUserRoleGuidFromUserID(id.Value); 
_OpsAdminViewModel.ActiveRoleList = _OpsAdminViewModel.GetActiveRoles(); 
_OpsAdminViewModel.UserRoleSelectList = new SelectList(_OpsAdminViewModel.ActiveRoleList, "RoleID", "RoleName", _OpsAdminViewModel.userRoleID); 

ビュー:それは非常に奇妙な取得する場所今

@Html.DropDownListFor(model=>model.selectedRoleID, Model.UserRoleSelectList) 

、ここにあります。私がコントローラのReturn行またはViewのDropDownListFor行に改行を置くと、文字通り、選択したい値を選択する必要があります。 UserRoleSelectListオブジェクトを展開し、正しい "SelectedValue" IDを表示し、 "結果ビュー"で、正しい値に選択された "True"が表示されます。ただし、ページがレンダリングされるとき、プルダウンメニューには、プルダウンメニューの0位置要素が表示されます。

答えて

0

モデルバインディングは、プロパティの値にバインドすることによって機能します。メソッドDropDownListFor()を使用すると、メソッドは内部的に新しいIEnumerable<SelectListItem>を構築し、プロパティの値に基づいてSelectedプロパティを設定します。あなたのケースでは、selectedRoleIDの値がオプションの1つの値と一致しないため、最初のオプションが選択されています(何かが必要なため)。

ビュー

model.selectedRoleID = _OpsAdminViewModel.userRoleID; 
return View(model); 

にモデルを渡すと、その無意味以来、あなたのSelectListコンストラクタで最後のパラメータを削除する前に、GETメソッドでselectedRoleIDの値を設定します。

+0

これは簡単でした!私は、ビューモデル(userRoleIDとselectedRoleID)に2つの異なるプロパティを持たせることで、複雑なものになりました。今は修正されています。ありがとうございました!!! – Anonymous3521