ASP.NET MVCでDropDownListForの選択を設定する方法
3190 ワード
MVCでは、強いタイプの編集ページに関連してselect要素がある場合は、現在のModelの属性値に基づいてselectの項目を選択する必要があります.本編は構想を整理するだけで,完全なコードには触れない.
□考え方
フロントビューに送信されるタイプはListであり、SelectListItem選択項目のSelected属性をtrueに設定し、そのタイプのオブジェクトインスタンスをViewBag、ViewDataまたはModelに配置してフロントビューに渡す.
Listタイプオブジェクトインスタンスを巡回する
□コントローラ
□フロントビュー表示
@model DomainModel @Html.DropDownListFor(m=>m.SomeProperty、(List)ViewData["somekey","==を選択してください=")
Modelコレクションを巡回する
選択されているかどうかを示すboolタイプのフィールドをView Modelに設定します.Modelのいくつかの属性をSelectListItemのTextとValue値とする.ViewModelのブール属性に基づいて、SelectListItemのSelectedをtrueに設定か否かを判定する.
□ View Model
□コントローラ
以下は他のネットユーザーの補足です.
バックグラウンドコード:
フロントエンドコード:
@using(Html.BeginForm(){@Html.DropDownList("drop",ViewData["d"]as SelectList)}現在の項目ID:@ViewData["ruturned"]
□考え方
フロントビューに送信されるタイプは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"]