首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >asp.net mvc @Html.CheckBoxFor

asp.net mvc @Html.CheckBoxFor
EN

Stack Overflow用户
提问于 2013-05-22 17:26:15
回答 4查看 119.3K关注 0票数 18

我的表单中有复选框

我在我的模型中添加了

代码语言:javascript
复制
 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; }
 }

并在我的表单中添加

代码语言:javascript
复制
@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" })

但我明白错误所在

怎么了?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-22 17:33:23

CheckBoxFor接受一个bool,你正在向它传递一个List<CheckBoxes>。你需要做的是:

代码语言:javascript
复制
@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。您也需要填充它,通过在您的操作方法中执行以下操作:

代码语言:javascript
复制
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);
}
票数 38
EN

Stack Overflow用户

发布于 2013-05-22 17:36:23

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

代码语言:javascript
复制
model => model.EmploymentType

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

代码语言:javascript
复制
@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) })
}
票数 3
EN

Stack Overflow用户

发布于 2013-05-22 17:35:09

使用以下代码:

代码语言:javascript
复制
@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" })
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16688170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档