2017-07-30 9 views
1

あらかじめ選択した値を取得しようとすると問題が発生します。 私はSelectListItemにSelectedをインクルードしようとしましたが、あらかじめ選択されていません。 なぜマッチアップしていないのかの手がかりは?助けてくれてありがとう。DropDownListデフォルトを選択しない

RetailerIdはintです。 (それが列挙として定義されていない)

小売業者は、例えば、列挙型である:ここで

public enum Retailer 
{ 
    Sears = 10, 
    Macys = 20 
} 

は、ビューコードです:

@Html.DropDownListFor(x => x.RetailerId, 
        Enum.GetValues(typeof(Retailer)).Cast<Retailer>() 
        .OrderBy(o => o.GetDescription()) 
        .Select(o => new SelectListItem() { Text = o.GetDescription(), Value = o.ToString(), Selected = (o.ToInt() == Model.RetailerId) }), 
        new { @data_placeholder = "Select Retailer", @class = "form-control" }) 

答えて

3

あなたがValueはどちらかであるSelectListItemのコレクションを生成しますプロパティーRetailerIdにバインドすることができない "シアーズ"または "マシス"は、intです。

SelectedプロパティがSelectListItemであることは、モデルプロパティにバインドするときは無視されることに注意してください。内部的には、このメソッドはバインドするプロパティの値に基づいてSelectedプロパティを設定します。int以降、オプション値と一致しないため、最初のオプションが選択されています。

あなたはとてもあなたに感謝し、また

.Select(o => new SelectListItem() { Text = o.GetDescription(), Value = ((int)o).ToString() }), 

.Select句を変更することによって、この作業を行う

.Select(o => new SelectListItem() { Text = o.GetDescription(), Value = o.ToString() }), 
+0

public Retailer RetailerId { get; set; } 

.Select句をモデルプロパティを変更することができます多く、それは動作します!説明のためにthx!選択されたプロパティがバインディング時にいくつかのドキュメントから無用であることがわかっていたでしょう。 – user1161137

関連する問題