18

我的表单中有复选框
在此处输入图像描述

我在我的模型中添加

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;

 namespace CorePartners_Site2.Models
 {
public class CareerForm
     {
    //....
    public List<CheckBoxes> EmploymentType { get; set; } 
      }
 }

 public class CheckBoxes
 {
     public string Text { get; set; }
     public bool Checked { get; set; }
 }

并在我的表格中添加

@Html.CheckBoxFor(model => model.EmploymentType, new { id = "employmentType_1" })
@Html.CheckBoxFor(model => model.EmploymentType, new { id = "employmentType_2" })
@Html.CheckBoxFor(model => model.EmploymentType, new { id = "employmentType_3" })

但我错了
在此处输入图像描述

怎么了?

4

4 回答 4

38

CheckBoxFor需要 a bool,你正在传递 aList<CheckBoxes>给它。你需要这样做:

@for (int i = 0; i < Model.EmploymentType.Count; i++)
{
    @Html.CheckBoxFor(m => m.EmploymentType[i].Checked, new { id = "employmentType_" + i })
    @Html.HiddenFor(m => m.EmploymentType[i].Text)
    @Html.DisplayFor(m => m.EmploymentType[i].Text)
}

请注意,我也HiddenFor为该Text属性添加了一个,否则当您发布表单时您会丢失它,因此您不会知道您检查了哪些项目。

编辑,如您的评论中所示,您的EmploymentType列表是null提供视图的时间。您还需要通过在您的操作方法中执行此操作来填充它:

public ActionResult YourActionMethod()
{
    CareerForm model = new CareerForm();

    model.EmploymentType = new List<CheckBox>
    {
        new CheckBox { Text = "Fulltime" },
        new CheckBox { Text = "Partly" },
        new CheckBox { Text = "Contract" }
    };

    return View(model);
}
于 2013-05-22T09:33:22.693 回答
3

Html.CheckBoxFor期望 aFunc<TModel, bool>作为第一个参数。因此,您的 lambda 必须返回 a bool,您当前正在返回的实例List<Checkboxes>

model => model.EmploymentType

您需要遍历List<Checkboxes>以输出每个复选框:

@for (int i = 0; i < Model.EmploymentType.Count; i++)
{
    @Html.HiddenFor(m => m.EmploymentType[i].Text)
    @Html.CheckBoxFor(m => m.EmploymentType[i].Checked, 
              new { id = string.Format("employmentType_{0}", i) })
}
于 2013-05-22T09:36:22.743 回答
2

使用此代码:

@for (int i = 0; i < Model.EmploymentType.Count; i++)
{
    @Html.HiddenFor(m => m.EmploymentType[i].Text)
    @Html.CheckBoxFor(m => m.EmploymentType[i].Checked, new { id = "YourId" })
}
于 2013-05-22T09:35:09.153 回答
1

如果只应同时选中一个复选框,请改用 RadioButtonFor:

      @Html.RadioButtonFor(model => model.Type,1, new { @checked = "checked" }) fultime
      @Html.RadioButtonFor(model => model.Type,2) party
      @Html.RadioButtonFor(model => model.Type,3) next option...

如果可以同时检查一个以上,请使用出色的扩展:CheckBoxListFor

希望,它会有所帮助

于 2013-05-22T09:56:26.517 回答