2017-01-31 19 views
0

ステータスのリストをHtml.DropDownListに渡しています。私はこれらの項目の1つをデフォルトとして選択する方法を探していたので、ユーザーが何も変更しなければ、正しい状態がモデルに返されます。私が見つけたものはすべて、追加の値(通常は「ヌル」オプション)をリストに追加することを扱っています。DropDownListからデフォルト値を選択

どのように既定のアイテムを既定に設定しますか?

モデル:

public class ListStatus 
{ 
    public string Name { get; set; } 
    public Guid StatusID { get; set; } 
} 

public class ViewModel 
{ 
    public List<ListStatus> Statuses { get; set; } 
} 

ビュー:

@Html.DropDownList("StatusID", Model.Statuses.Select(s => new SelectListItem() { Text = s.Name, Value = s.StatusID.ToString() }), new { @class = "medium", required = true }) 

サンプルデータ:

'11111111-1111-1111-1111-111111111111': Option 1, 
'22222222-2222-2222-2222-222222222222': Default, 
'33333333-3333-3333-3333-333333333333': Option 3, 
'44444444-4444-4444-4444-444444444444': Option 4 
+0

それでモデルを渡す前に 'StatusID'の値をコントローラーのオプション値の1つと一致するように設定してくださいモデルのバインディングがどのように機能するかが選択されます。また、ビューモデルに 'Guid StatusID'プロパティが含まれていない場合は、それを追加します(厳密に型付けされた' @Html.DropDownListFor(m => m.StatusID、Model.Statuses) '' Statuses'は 'IEnumerable 'を実行し、ビューではなくコントローラに' SelectList'を生成します。 –

答えて

0

ViewModelにSelectedStatusという別のフィールドを追加し、その値を目的のデフォルト値に設定することができます。次に、@ Html.DropDownListForを使用してデフォルト値を表示できます。あなたのビューここ

@Html.DropDownListFor(m=>m.SelectedStatus, Model.Statuses.Select(s => new SelectListItem() { Text = s.Name, Value = s.StatusID.ToString() }), new { @class = "medium", required = true }) 

であなたのコントローラ

[HttpGet] 
public ActionResult Index() 
{ 
    List<ListStatus> lstStatus = new List<ListStatus>(){ 
     new ListStatus() { Name="X",StatusID = Guid.NewGuid() }, 
     new ListStatus() { Name="Y",StatusID = Guid.NewGuid() }, 
     new ListStatus() { Name="Z",StatusID = Guid.NewGuid() } 
    }; 

    ViewModel objModel = new ViewModel(); 
    objModel.Statuses = lstStatus; 
    objModel.SelectedStatus = lstStatus[1].StatusID; // Select whatever you want here to be default. 

    return View(objModel); 
} 

public class ViewModel 
{ 
    public Guid SelectedStatus {get;set;} 
    public List<ListStatus> Statuses { get; set; } 
} 

はフィドルです:あなたは、あなたがに渡すモデルの `StatusID`プロパティにバインドhttps://dotnetfiddle.net/vTJhaj

0

あなたは、あなたのコントローラでList<SelectListItem>を構築し、ビューモデルに戻ってそれを渡す場合Selectedプロパティを使用して、デフォルトで選択したいものを簡単に見つけることができます。

https://msdn.microsoft.com/en-us/library/system.web.mvc.selectlistitem(v=vs.118).aspx

public class ViewModel 
{ 
    public List<SelectListItem> Statuses { get; set; } 
} 


// in controller 
ViewModel model = new ViewModel(); 

// assumes listStatuses is still your ListStatus type. 
model.Statuses = listStatuses.Select(s => new SelectListItem() { 
    Text = s.Name, 
    Value = s.StatusID.ToString(), 

    // or whatever your criteria may be. 
    Selected = s.Name == "22222222-2222-2222-2222-222222222222" 
}) 

今、あなたはどちらか、ビューに新しい型に変換する必要はありません。

関連する問題