2013-05-22 13 views
16

devo caselle di controllo nella mia forma
enter image description hereasp.net mvc @ Html.CheckBoxFor

ho aggiunto al mio modello

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

e ha aggiunto alla mia forma

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

ma io ottenere l'errore
enter image description here

Cosa c'è che non va?

risposta

33

CheckBoxFor prende un bool, si sta passando un List<CheckBoxes> ad esso. Avresti bisogno di fare:

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

Avviso Ho una HiddenFor per la proprietà troppo Text, altrimenti ci si perde che quando hai postato il modulo, quindi non si sa quali elementi che ci si controllato.

Modificare, come mostrato nei commenti, l'elenco EmploymentType è null quando viene servita la vista. Avrete bisogno di popolare che anche, in questo modo nel vostro metodo di azione:

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); 
} 
+0

Devo aggiungere che il codice a mia forma? – Heidel

+0

@Heidel Yeah nel modulo – mattytommo

+0

Ho provato, ma ho ottenuto questo [http://i.imgur.com/Q78xcBD.png](http://i.imgur.com/Q78xcBD.png). Cosa c'è che non va? – Heidel

1

di questo codice:

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

Html.CheckBoxFor aspetta una Func<TModel, bool> come primo parametro. Di conseguenza il vostro lambda deve restituire un bool, si sta restituendo un istanza di List<Checkboxes>:

model => model.EmploymentType 

È necessario iterare il List<Checkboxes> in uscita ogni casella:

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

Se solo una casella di controllo deve essere controllato allo stesso tempo utilizzare RadioButtonFor invece:

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

Se uno più potrebbe essere controllato nello stesso tempo utilizzare exc estensione ellent: CheckBoxListFor:

Speranza, vi aiuterà

+1

No, grazie, ma non ho bisogno di RadioButton qui – Heidel