ASP.NET MVCでDropDownListForの選択を設定する方法

3190 ワード

MVCでは、強いタイプの編集ページに関連してselect要素がある場合は、現在のModelの属性値に基づいてselectの項目を選択する必要があります.本編は構想を整理するだけで,完全なコードには触れない.
□考え方
フロントビューに送信されるタイプはListであり、SelectListItem選択項目のSelected属性をtrueに設定し、そのタイプのオブジェクトインスタンスをViewBag、ViewDataまたはModelに配置してフロントビューに渡す.
Listタイプオブジェクトインスタンスを巡回する
□コントローラ

public ActionResult SomeAction(int id)
{
  //      Domain Model
  var domainModel = ModelService.LoadEntities(m => m.ID == id).FirstOrDefault();
 
  //        List      
  List items = SomeMethod();
 
  //    ,    Domain model      SelectListItem Value    , SelectListItem Selected     true
  foreach(SelectListItem item in items)
  {
    if(item.Value == Convert.ToString(domainModel.   ))
    {
      item.Selected = true;
    }
  }
 
  // List        ViewData 
  ViewData["somekey"] = items;
 
  //      Domain Model   View Model
 
  return PartialView(domainModel);
}


□フロントビュー表示
@model DomainModel @Html.DropDownListFor(m=>m.SomeProperty、(List)ViewData["somekey","==を選択してください=")
Modelコレクションを巡回する
選択されているかどうかを示すboolタイプのフィールドをView Modelに設定します.Modelのいくつかの属性をSelectListItemのTextとValue値とする.ViewModelのブール属性に基づいて、SelectListItemのSelectedをtrueに設定か否かを判定する.
□ View Model

public class Department
{
  public int Id {get;set;}
  public string Name {get;set;}
  public bool IsSelected {get;set;}
}

□コントローラ

public ActionResult Index()
{
 SampleDbContext db = new SampleDbContext();
 List selectListItems = new List();
 
 //  Department   
 foreach(Department department in db.Departments)
 {
  SelectListItem = new SelectListItem
  {
   Text = department.Name,
   Value = department.Id.ToString(),
   Selected = department.IsSelected.HasValue ? department.IsSelected.Value : false
  }
  selectListItems.Add(selectListItem);
 }
 ViewBag.Departments = selectListItems;
 return View();
}

以下は他のネットユーザーの補足です.
バックグラウンドコード:

public ActionResult Index(FormCollection collection)
     {
       IList li = Utility.SqlHelper.getProjectList();
       SelectList selec = new SelectList(li, "ID", "Name");
   
       if (collection["drop"] != null)
       {
         string projectID = collection["drop"];
         selec = new SelectList(li, "ID", "Name", projectID);//                
        ViewData["ruturned"] = collection["drop"];
       }
       ViewData["drop"] = selec;
      return View();
    }


フロントエンドコード:
@using(Html.BeginForm(){@Html.DropDownList("drop",ViewData["d"]as SelectList)}現在の項目ID:@ViewData["ruturned"]