it-swarm.com.de

asp.net mvc @ Html.CheckBoxFor

Ich habe Checkboxen in meinem Formular
enter image description here

Ich habe bei meinem Modell hinzugefügt 

 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; }
 }

und bei meinem Formular hinzugefügt

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

aber ich bekomme den fehler
enter image description here

Was ist falsch?

17
Heidel

CheckBoxFor nimmt eine bool, Sie übergeben einen List<CheckBoxes>. Sie müssten tun:

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

Hinweis Ich habe auch eine HiddenFor für die Text -Eigenschaft hinzugefügt. Andernfalls würden Sie diese Einstellung verlieren, wenn Sie das Formular bereitstellen. Sie wissen also nicht, welche Elemente Sie überprüft haben.

Bearbeiten Sie, wie in Ihren Kommentaren gezeigt, Ihre EmploymentType-Liste null, wenn die Ansicht bereitgestellt wird. Sie müssen dies auch in Ihrer Aktionsmethode auffüllen:

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);
}
37
mattytommo

Html.CheckBoxFor erwartet einen Func<TModel, bool> als ersten Parameter. Daher muss Ihr Lambda eine bool zurückgeben. Sie geben derzeit eine Instanz von List<Checkboxes> zurück:

model => model.EmploymentType

Sie müssen den List<Checkboxes> durchlaufen, um jedes Kontrollkästchen auszugeben:

@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
Oliver

Verwenden Sie diesen Code:

@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
user1968030

Wenn nur ein Kontrollkästchen gleichzeitig aktiviert werden soll, verwenden Sie stattdessen 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...

Wenn eine weitere Option gleichzeitig eingecheckt werden kann, verwenden Sie eine ausgezeichnete Erweiterung: CheckBoxListFor :

Hoffe, es wird helfen

1