2017-05-02 4 views
1

私はこのSelectListのを持っている:MVC、SelectListの選択したオブジェクトの値

コントローラ:

ViewBag.SagId = new SelectList(db.Sags, "Id", "Emne", 7); 

リストおよびすべて見る

にsuposedとして動作しますが、選択された値は== 7ではない、

@Html.DropDownListFor(x => x.SagId,(IEnumerable<SelectListItem>) ViewBag.SagId, 
new 
{ 

    @class = "selectpickers", 
    data_show_subtext = "true", 
    data_live_search = "true" 

}) 

私は逃したでしょうか?

+0

あなたのプロパティの値にバインドして動作します。モデルをビューに渡して選択する前に、GETメソッドで 'SagId'の値を' 7 'に設定してください。 –

+0

私はそれが常に7であることを望んでいません、ちょうどそれが彼らが訪問するサイトに応じて変更することができるintであることを望んでいただけで、 'SelectList'コンストラクタの4番目のパラメータは無視されます。 – user3759748

+0

実際の値が何であるかは関係ありません。プロパティ 'SagId'の値を設定する必要があり、オプション値の1つに一致する場合は選択されます(そうでなければ、何かがあるため最初のオプションが選択されます)。つまり、モデルバインディングの仕組みです。 –

答えて

0

モデルバインディングは、モデルプロパティの値にバインドすることで機能します。モデルをビューに渡す前に、コントローラーにプロパティーSagIdの値を設定する必要があります。

お使いのコントローラメソッドであなたのコードはSelectListコンストラクタで4番目のパラメータを設定する点がないことを

var model = new YourModel() 
{ 
    SagId = 7 
}; 
ViewBag.SagId = new SelectList(db.Sags, "Id", "Emne"); 
return View(model); 

ノートのようなものでなければなりません。 DropDownListFor()メソッドが内部でIEnumerable<SelectListItem>を構築し、バインドするプロパティの値に基づいてSelectedプロパティを設定するため、モデルプロパティにバインドするときは無視されます。

バインドするプロパティに同じ名前を使用しないでください(Can the ViewBag name be the same as the Model property name in a DropDownList?を参照)。特に編集時にビューモデルを使用することを強くお勧めします。このビューモデルにはプロパティーpublic IEnumerable<SelectListItem> SagList { get; set; }とビューではそれは@Html.DropDownListFor(m => m.SagId, Model.SagList, new { ... })

関連する問題