ASP.Net MVC 3检索CheckBoxList值

时间:2012-04-18 12:28:29

标签: asp.net-mvc-3 viewmodel checkbox checkboxlist editorfor

我正在开发一个ASP.Net MVC 3 Web应用程序,我在控制器中检索HttpPost方法中的选定复选框值时遇到了困难。希望有人可以提供帮助。

我有2个ViewModels

public class ViewModelShiftSubSpecialties
{
    public IEnumerable<ViewModelCheckBox> SpecialtyList { get; set; }
}

public class ViewModelCheckBox
{
    public string Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
    public string Specialty { get; set; }
}

我使用的部分视图作为EditorTemplate

@model Locum.UI.ViewModels.ViewModelCheckBox

@Html.HiddenFor(x => x.Id)        
@Html.CheckBoxFor(x => x.Checked)
@Html.LabelFor(x => x.Name, Model.Name)<br />

在我的视图中,我创建了两个标题下的复选框,即医学和外科手术

<h3>Medicine</h3>
foreach (var sub in Model.SpecialtyList)
{
if (sub.Specialty.Equals("Medicine"))
 {
    @Html.EditorFor(m => sub)
 }
}
<h3>Surgery</h3>

foreach (var sub in Model.SpecialtyList)
{
if (sub.Specialty.Equals("Surgery"))
 {
    @Html.EditorFor(m => sub)
 }

}

然后在我的HttpPost控制器中,我尝试获取所选复选框的值,但mode.SpecialtyList始终为空

 [HttpPost]
    public ActionResult AssignSubSpecialties(ViewModelShiftSubSpecialties model)
    {
        foreach (var item in model.SpecialtyList)
        {
            if (item.Checked)
            {
                //do some logic
            }
        }

        return View();
    }

有谁知道为什么model.SpecialtyList总是空的?

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:3)

给复选框添加相同的名称,如:

<input type="checkbox" name="ViewModelShiftSubSpecialties.SpecialtyList" .../>

它将发布一个数组