2013-05-22 3 views
16

меня флажков в моей форме
enter image description hereasp.net MVC @ Html.CheckBoxFor

Я добавил в моей модели

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

но я получить ошибку
enter image description here

Что случилось?

ответ

33

CheckBoxFor принимает bool, вы передаете ему List<CheckBoxes>. Вы должны были бы сделать:

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

Обратите внимание, я добавил HiddenFor для Text собственности тоже, иначе вы бы потерять, что, когда Вы отправили форму, так что вы не знаете, какие элементы вы бы проверено.

Редактировать, как показано в ваших комментариях, ваш список 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); 
} 
+0

мне нужно добавить этот код в моей форме делать? – Heidel

+0

@Heidel Да в вашей форме – mattytommo

+0

Я пробовал, но я получил это [http://i.imgur.com/Q78xcBD.png](http://i.imgur.com/Q78xcBD.png). что не так? – Heidel

1

Используйте этот код:

@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 ожидает Func<TModel, bool> в качестве первого параметра. Поэтому ваш лямбда должен возвратить bool, вы в настоящее время возвращаются экземпляр List<Checkboxes>:

model => model.EmploymentType 

Вам нужно перебрать List<Checkboxes> выводить каждый флажок:

@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

Если только один флажок должен быть проверен в то же время используйте 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... 

Если еще один может быть проверен в одно и то же время, используйте exc ellent расширение: CheckBoxListFor:

Надежда, это поможет

+1

Нет, спасибо, но мне не нужен RadioButton здесь – Heidel

Смежные вопросы