【问题标题】:asp.net mvc @Html.CheckBoxForasp.net mvc @Html.CheckBoxFor
【发布时间】:2023-03-15 19:50:01
【问题描述】:

我的表单中有复选框

我在我的模型上添加了

 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" })

但我弄错了

怎么了?

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    CheckBoxFor 接受bool,你将List&lt;CheckBoxes&gt; 传递给它。你需要这样做:

    @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,否则当您发布表单时您会丢失它,因此您不会知道您检查了哪些项目。

    编辑,如您的 cmets 所示,您的 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);
    }
    

    【讨论】:

    • @Heidel 是的在你的表单中
    • 我试过了,但我得到了这个http://i.imgur.com/Q78xcBD.png。怎么了?
    • 我应该在我的模型中添加一些东西吗?
    • @Heidel 检查我的编辑,您需要填充EmploymentType 列表。
    • @Heidel 名称必须是这样的,这样当您发布表单时,模型绑定器可以正确绑定回您的列表。
    【解决方案2】:

    如果应同时选中一个复选框,请改用 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:

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      Html.CheckBoxFor 需要 Func&lt;TModel, bool&gt; 作为第一个参数。因此,您的 lambda 必须返回 bool,您当前正在返回 List&lt;Checkboxes&gt; 的实例:

      model => model.EmploymentType
      

      您需要遍历List&lt;Checkboxes&gt; 以输出每个复选框:

      @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) })
      }
      

      【讨论】:

        【解决方案4】:

        使用此代码:

        @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" })
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-23
          • 2012-09-22
          • 1970-01-01
          • 2012-09-29
          • 1970-01-01
          • 2015-03-20
          相关资源
          最近更新 更多