ASP.NET MVC 3.0知識メモ(2)【RadioButtonList、CheckBox List】

7097 ワード

実践五.RadioButtonListの表示
  1.データベースからデータが抽出された場合:
List<Category> cateoryList = new List<Category>()
{
new Category(){
CategoryID = 1,
CategoryName = " "
},
new Category(){
CategoryID = 2,
CategoryName = " "
}
};

  
  2.LinqによりSelectListItemタイプの集合が生成され、ViewData[CategoryID]が付与される
ViewData["CategoryID"] = (from item in cateoryList
select new SelectListItem()
{
Value = item.CategoryID.ToString(),
Text = item.CategoryName
}).ToList();

必ずToList()を呼び出す必要があります.そうしないと、クエリの遅延によって空のViewData["CategoryID"]がViewレイヤに転送されます.
 
  3.Viewレイヤの最上位には、Viewデータをローカル変数に割り当てることができます.
@{
List<SelectListItem> CategoryItems = ViewData["CategoryID"] as List<SelectListItem>;
}

  
  4.遍歴集合生成Radio出てくる:オリジナルのHTMLを生成し、
注意:radioのnameはViewDataのキー名と同じです.
for (int i = 0; i < @CategoryItems.Count; i++)
{
var isChecked = "";
SelectListItem item = @CategoryItems[i];
if (item.Selected == true)
{
isChecked = "checked = 'checked'";
}

<input type="radio" id="@string.Format("CategoryID_{0}", @i)" name="CategoryID" value="@item.Value" @isChecked />
<label for="@string.Format("CategoryID_{0}", @i)">@item.Text</label>
}

実践六.CheckBoxリストの表示
ステップは5ステップに分けられ、前の3ステップは上と同じで、ここでは後のステップだけを言います.
  4.タイプはcheckboxに違いない.マルチ選択ボックスの本質は1つの集合に対するチェックであるため,nameは適切に複数の形式で表現できる.
for (int i = 0; i < @CategoryItems.Count; i++)
{
var isChecked = "";
SelectListItem item = @CategoryItems[i];
if (item.Selected == true)
{
isChecked = "checked = 'checked'";
}

<input type="checkbox" id="@string.Format("CategoryID_{0}", @i)" name="CategoryIDs" value="@item.Value" @isChecked />
<label for="@string.Format("CategoryID_{0}", @i)">@item.Text</label>
}

 
  5.Postリクエストのアクションのパラメータに基づいて、checkBoxのnameと同じ名前の文字列配列を追加してもいいです.
[HttpPost]
public void EditOrder(Order order, string[] CategoryIDs)
{

}

ベースのstringタイプ、intタイプを含む属性については、Postリクエストに基づくActionのパラメータに同名が現れる限り、値が付与され、Orderクラスを含む属性にも値が付与されます.これは重複しているように見えますが、次のように見えます.
[HttpPost]
public void EditOrder(Order order, string[] CategoryIDs, string Description)
{

}