[英]CheckBox lists in ASP.NET MVC and bind it back to controller
Html.CheckBox("SelectedStudents", false, new { @class = "check-item", id = x.Id, value = x.Id })
哪個產生
<input checked="checked" class="check-item" id="4507" name="SelectedStudents" value="4507" type="checkbox">
<input checked="checked" class="check-item" id="4507" name="SelectedStudents" value="4508" type="checkbox">
<input checked="checked" class="check-item" id="4507" name="SelectedStudents" value="4509" type="checkbox">
在mvc模型中,我有
public IEnumerable<string> SelectedStudents { get; set; }
但是當我回帖時,SelectedStudents總是為空。 為什么? 在這個方法http://benfoster.io/blog/checkbox-lists-in-aspnet-mvc寫的:
ASP.NET MVC模型綁定器非常智能,可以將所選項映射到此屬性。
但在我的例子中總是為空。 為什么? 如何編寫更多復選框並將其綁定回來
您應該使用強類型編輯器將結果傳遞給控制器(模型綁定器)。
我更喜歡這樣做。
模型
public class YourViewModel
{
public List<SelectListItem> Students
{
get;
set;
}
}
控制器獲取
Students= service.GetStudents(); //Fill the list
視圖
@for (var i = 0; i < Model.Students.Count; i++)
{
@Html.CheckBoxFor(m => m.Students[i].Selected)
@Html.HiddenFor(m => m.Students[i].Text)
@Html.HiddenFor(m => m.Students[i].Value)
<span>@Model.Students[i].Text</span>
}
控制器帖子
[HttpPost]
public ActionResult Create(YourViewModel model)
{
foreach(var student in model.Students)
{
if(student.Selected) { // Do your logic}
}
}
或者,您可以使用數組或字符串列表。 在此示例中使用ListBox。
public string[] SelectedStudents{ get; set; }
@Html.ListBoxFor(s => s.SelectedStudents, new MultiSelectList(Model.Students, "Value", "Text", Model.SelectedStudents), new { @class = "form-control", style = "height:250px; width:100%" })
在此處查看我的答案如何將復選框值綁定到整數列表? 。
關於這一點的好處是它可以很好地區分控制器和ui之間的關注點。 html擴展方法還使用標簽和輸入為復選框創建正確的html。 並且不需要隱藏的字段。
你用CheckBoxListFor嘗試嗎? 您需要將復選框與模型關聯,並且不應具有相同的ID和名稱
@Html.CheckBoxListFor(model => model.SelectedSources, Model.SubscriptionSources)
您需要使用可變類型,例如List<string>
。
public List<string> SelectedStudents { get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.