VisualStuidioCommunity2015/Fw4.5.2/C#
前回に続いて基本的なHTMLヘルパーのうち、今回は下記のヘルパー見ていきます。
- DropDownList/ DropDownListFor
- ListBox / ListBoxFor
- EnumDropDownListFor
入力要素のレンダリング
DropDownList/ DropDownListFor
まずはDropDownListです。ドロップダウンリストの選択肢リストの作成にはIEnumerable<SelectListItem>を使用する方法とSelectListを使用する方法があります。
下記のサンプルはIEnumerable<SelectListItem>を使用した方法です。
選択肢の作成と同時に選択状態を表すselectedプロパティを指定します。
ビューで選択肢リストを作成していますが、コントローラーで作成しViewBag経由で引き渡してもいいですし、ビューモデル経由で引き渡してもいいです。
@{
var items= new List<SelectListItem>()
{
new SelectListItem() {Value = "1", Text = "日曜日" },
new SelectListItem() {Value = "2", Text = "月曜日" },
new SelectListItem() {Value = "3", Text = "火曜日" , Selected = true},
new SelectListItem() {Value = "4", Text = "水曜日" },
new SelectListItem() {Value = "5", Text = "木曜日" },
new SelectListItem() {Value = "6", Text = "金曜日" },
new SelectListItem() {Value = "7", Text = "土曜日" },
};
}
DropDownList:
@Html.DropDownList("DropDownListID", items)
DropDownList(selectListitem)の出力: <select id="DropDownListID" name="DropDownListID"> <option value="1">日曜日</option> <option value="2">月曜日</option> <option selected="selected" value="3">火曜日</option> <option value="4">水曜日</option> <option value="5">木曜日</option> <option value="6">金曜日</option> <option value="7">土曜日</option> </select>次にSelectListを使用する方法です。
SelectListは1つの項目を選択できる一覧を表すクラスです。
IEnumerable<SelectListItem>を実装しています。
まず選択肢リストになるIEnumerableなリストを作成します。
そして選択肢リスト、選択値用フィールド名、表示用フィールド名、および選択値を指定して、SelectListインスタンスを作ります。
DropDownListメソッドには作成したSelectListを指定します。
@{
var items = new List<KeyValuePair<string,string>>()
{
new KeyValuePair<string,string>("1", "日曜日"),
new KeyValuePair<string,string>("2", "月曜日"),
new KeyValuePair<string,string>("3", "火曜日"),
new KeyValuePair<string,string>("4", "水曜日"),
new KeyValuePair<string,string>("5", "木曜日"),
new KeyValuePair<string,string>("6", "金曜日"),
new KeyValuePair<string,string>("7", "土曜日"),
};
var list = new SelectList(items, //選択肢リスト
"Key", //Value値に指定するプロパティ名
"Value", //Text値に指定するプロパティ名
"4"); //選択値
}
DropDownList(SelectList):
@Html.DropDownList("DropDownListID", list)
続いてDropDownListForです。
こちらはIEnumerable<SelectListItem>を使用しても、選択値はモデルから設定できます。
@{
var items = new List<SelectListItem>()
{
new SelectListItem() {Value = "1", Text = "日曜日" },
new SelectListItem() {Value = "2", Text = "月曜日" },
new SelectListItem() {Value = "3", Text = "火曜日" },
new SelectListItem() {Value = "4", Text = "水曜日" },
new SelectListItem() {Value = "5", Text = "木曜日" },
new SelectListItem() {Value = "6", Text = "金曜日" },
new SelectListItem() {Value = "7", Text = "土曜日" },
};
}
DropDownListFor:
@Html.DropDownListFor(mdl => mdl.DropDownValue, items)
SelectListを使用した方法です。
@{
var items = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string,string>("1", "日曜日"),
new KeyValuePair<string,string>("2", "月曜日"),
new KeyValuePair<string,string>("3", "火曜日"),
new KeyValuePair<string,string>("4", "水曜日"),
new KeyValuePair<string,string>("5", "木曜日"),
new KeyValuePair<string,string>("6", "金曜日"),
new KeyValuePair<string,string>("7", "土曜日"),
};
var list = new SelectList(items,"Key","Value");
}
@Html.DropDownListFor(mdl => mdl.DropDownValue, list)
ListBox/ ListBoxFor
複数選択できるリストボックスです。ドロップダウンリストの選択肢リストの作成にはIEnumerable<SelectListItem>を使用する方法とMultiSelectListを使用する方法があります。
まずはListBoxです。
下記のサンプルはIEnumerable<SelectListItem>を使用した方法です。
@{
var items= new List<SelectListItem>()
{
new SelectListItem() {Value = "1", Text = "日曜日" },
new SelectListItem() {Value = "2", Text = "月曜日" },
new SelectListItem() {Value = "3", Text = "火曜日" , Selected = true},
new SelectListItem() {Value = "4", Text = "水曜日" },
new SelectListItem() {Value = "5", Text = "木曜日" },
new SelectListItem() {Value = "6", Text = "金曜日" },
new SelectListItem() {Value = "7", Text = "土曜日" , Selected = true},
};
}
ListBox:
@Html.ListBox("ListBoxID", items)
ListBoxの出力: <select id="ListBoxID" multiple="multiple" name="ListBoxID"> <option value="1">日曜日</option> <option value="2">月曜日</option> <option selected="selected" value="3">火曜日</option> <option value="4">水曜日</option> <option value="5">木曜日</option> <option selected="selected" value="6">金曜日</option> <option value="7">土曜日</option> </select>次にMultiSelectListを使用する方法です。
MultiSelectListは複数の項目を選択できる一覧を表すクラスです。
IEnumerable<SelectListItem>を実装しています。
{
var items = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string,string>("1", "日曜日"),
new KeyValuePair<string,string>("2", "月曜日"),
new KeyValuePair<string,string>("3", "火曜日"),
new KeyValuePair<string,string>("4", "水曜日"),
new KeyValuePair<string,string>("5", "木曜日"),
new KeyValuePair<string,string>("6", "金曜日"),
new KeyValuePair<string,string>("7", "土曜日"),
};
var selectedItems = new String[] { "3", "6" };
var list= new MultiSelectList (items, "Key", "Value", selectedItems);
}
ListBox:
@Html.ListBox("ListBoxID", list)
つづいてListBoxForです。IEnumerable<SelectListItem>を使用する例です。
ビューモデル
public class HtmlHelperViewModels
{
public string[] ListBoxValues { get; set; }
}
コントローラー
public class HtmlHelperController : Controller
{
public ActionResult Index()
{
var mdl = new Models.HtmlHelperViewModels();
mdl.ListBoxValues = new string[] { "3", "6" };
return View(mdl);
}
}
ビュー
@{
var items = new List<SelectListItem>()
{
new SelectListItem() {Value = "1", Text = "日曜日" },
new SelectListItem() {Value = "2", Text = "月曜日" },
new SelectListItem() {Value = "3", Text = "火曜日" },
new SelectListItem() {Value = "4", Text = "水曜日" },
new SelectListItem() {Value = "5", Text = "木曜日" },
new SelectListItem() {Value = "6", Text = "金曜日" },
new SelectListItem() {Value = "7", Text = "土曜日" },
};
}
ListBoxFor:
@Html.ListBoxFor(mdl => mdl.ListBoxValues, items)
次にMultiSelectListを使用する方法です。
@{
var items = new List<KeyValuePair<string, string<<()
{
new KeyValuePair<string,string>("1", "日曜日"),
new KeyValuePair<string,string>("2", "月曜日"),
new KeyValuePair<string,string>("3", "火曜日"),
new KeyValuePair<string,string>("4", "水曜日"),
new KeyValuePair<string,string>("5", "木曜日"),
new KeyValuePair<string,string>("6", "金曜日"),
new KeyValuePair<string,string>("7", "土曜日"),
};
var selectedItems = new String[] { "3", "6" };
var list = new MultiSelectList(items, "Key", "Value", selectedItems);
}
ListBoxFor(SelectList):
@Html.ListBoxFor(mdl => mdl.ListBoxValues , list)
EnumDropDownListFor
ASP.NET MVC 5.1 からは列挙帯からDropDownListを生成することができます。モデル
namespace Practice.Models
{
public class HtmlHelperViewModels
{
public WeekdayType EnumValue { get; set; }
}
public enum WeekdayType
{
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
};
}
コントローラー
namespace Practice.Controllers
{
public class HtmlHelperController : Controller
{
public ActionResult Index()
{
Models.HtmlHelperViewModels mdl = new Models.HtmlHelperViewModels();
mdl.EnumValue = Models.WeekdayType.Thursday;
return View(mdl);
}
}
}
ビュー
@Html.EnumDropDownListFor(mdl => mdl.EnumValue)
EnumDropDownListForの出力: <select data-val="true" data-val-required="EnumValue フィールドが必要です。" id="EnumValue" name="EnumValue"> <option value="0">Monday</option> <option value="1">Tuesday</option> <option value="2">Wednesday</option> <option selected="selected" value="3">Thursday</option> <option value="4">Friday</option> <option value="5">Saturday</option> <option value="6">Sunday</option> </select>
EnumHelper.GetSelectListメソッドを使用すると、列挙帯からIList<SelectListItem>オブジェクトを生成することもできます。
@{
IList<SelectListItem> enumList =
EnumHelper.GetSelectList(typeof(Practice.Models.WeekdayType));
}
DropDownListFor:
@Html.DropDownListFor(mdl => mdl.EnumDropDownValue, enumList)
DropDownList:
@Html.DropDownList("EnumDropDownListID", new SelectList(enumList,"Value","Text","2"))
DropDownListの表示する値を列挙子の名前ではなく、他の表示名にしたい場合は、列挙子にDisplay属性で表示名を指定します。
using System.ComponentModel.DataAnnotations;
・・・省略・・・
public enum WeekdayType
{
[Display(Name = "月曜")]
Monday,
[Display(Name = "火曜")]
Tuesday,
[Display(Name = "水曜")]
Wednesday,
[Display(Name = "木曜")]
Thursday,
[Display(Name = "金曜")]
Friday,
[Display(Name = "土曜")]
Saturday,
[Display(Name = "日曜")]
Sunday
};
0 件のコメント:
コメントを投稿