2013-05-22 13 views
16

mam wyboru w moim formularzu
enter image description hereasp.net mvc @ Html.CheckBoxFor

I dodanych w moim modelu

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

i dodał na moim formularzu

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

ale Pomyśl o błędzie:
enter image description here

Co jest nie tak?

Odpowiedz

33

CheckBoxFor pobiera bool, przekazuje się do niego List<CheckBoxes>. trzeba by zrobić:

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

Zawiadomienie Dodałem HiddenFor dla właściwości Text też, że w przeciwnym razie można stracić, że kiedy pisał formę, więc nie wiem, które elementy dalszy sprawdzone.

Edytuj, jak pokazano w komentarzach, Twoja lista EmploymentType to null, gdy widok jest wyświetlany. Musisz wypełnić to też, robiąc to w swoim sposobie działania:

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

Czy muszę dodawać, że kod w moim formularzu? – Heidel

+0

@Heidel Tak wewnątrz twojego formularza – mattytommo

+0

Próbowałem, ale mam to [http://i.imgur.com/Q78xcBD.png](http://i.imgur.com/Q78xcBD.png). Co jest nie tak? – Heidel

1

użyć tego kodu:

@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 oczekuje Func<TModel, bool> jako pierwszy parametr. Dlatego twój lambda musi zwrócić bool, aktualnie powrocie wystąpienie List<Checkboxes>:

model => model.EmploymentType 

Musisz iteracyjne nad List<Checkboxes> do wyjścia każdego wyboru:

@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

Jeśli tylko jedno pole wyboru powinno być zaznaczone w tym samym użycie RadioButtonFor zamiast:

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

Jeśli jeszcze jedna mogła być sprawdzona w stosowaniu EXC samym czasie yć doskonały rozszerzenie: CheckBoxListFor:

Hope, to pomoże

+1

Nie, dziękuję, ale nie potrzebuję tutaj RadioButton – Heidel