我的表单中有复选框
我在我的模型中添加了
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" })
但我明白错误所在
怎么了?
发布于 2013-05-22 17:33:23
CheckBoxFor
接受一个bool
,你正在向它传递一个List<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)
}
请注意,我还为Text
属性添加了一个HiddenFor
,否则在发布表单时会丢失该for,因此您不知道检查了哪些项。
编辑,如您的评论所示,当提供视图时,您的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-22 17:36:23
Html.CheckBoxFor
期望Func<TModel, bool>
作为第一个参数。因此,您的lambda必须返回一个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-22 17:35:09
使用以下代码:
@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" })
}
https://stackoverflow.com/questions/16688170
复制相似问题