最初にChecked
ブール値とFeatureId
を関連付けるViewModelを追加します。
public class SelectedFeatureViewModel {
public bool Checked { get; set; } // to be set by user
public int FeatureID { get; set; } // to be populated by GET action
public string FeatureName { get; set; } // to be populated by GET action
}
GETアクションは、メインビューモデルを作成し、利用可能な機能(DormOptions
)のリストを初期化します。カミソリのマークアップで
public class CreateDormViewModel {
// used to render the checkboxes, to be initialized in GET controller action
// also used to bind the checked values back to the controller for POST action
public ICollection<SelectedFeatureViewModel> DormOptions { get; set; }
}
、DormOptions
コレクションにチェックボックスをバインド:CreateDorm
POSTアクションで
@model CreateDormViewModel
@using (Html.BeginForm("CreateDorm", "DormAdministration", FormMethod.Post)) {
// use for loop so modelbinding to collection works
@for (var i = 0; i < Model.DormOptions.Count; i++) {
<label>@Model.DormOptions[i].FeatureName</label>
@Html.CheckBoxFor(m => m.DormOptions[i].Checked)
// also post back FeatureId so you can access it in the controller
@Html.HiddenFor(m => m.DormOptions[i].FeatureID)
// post back any additional properties that you need to access in the controller
// or need in order to redraw the view in an error case
@Html.HiddenFor(m => m.DormOptions[i].FeatureName)
}
}
、チェックボックスの値は、あなたがCheckBoxFor
ラムダ、すなわちに与えたのViewModelプロパティにバインドされていますDormOptions
コレクションのChecked
プロパティです。
[HttpPost]
public ActionResult CreateDorm(CreateDormViewModel postData) {
var selectedFeatureIds = new List<int>();
foreach (var option in postData.DormOptions) {
if (option.Checked) {
selectedFeatureIds.Add(option.FeatureID);
}
}
// ...
}