Флажок MVC возвращается ноль - PullRequest
0 голосов
/ 02 марта 2012

У меня есть флажок, но форма отправляется, помеченное значение не отправляется ...

Html:

@foreach (var radiobutton in Model.InterestedIn)
           {
             <span >  @Html.CheckBox("selected", radiobutton)
               <label>@radiobutton</label></span>
               <br />
           } 

Модель:

[Display(Name = "Would you be interested in receiving *")]
        public IList<string> InterestedIn { get; set; }

Контроллер:

IList<string> lists = new List<string>();
            lists.Insert(0, "Latest News");
            lists.Insert(1, "Special Offers");
            lists.Insert(1, "New Products");
            model.InterestedIn = lists;

PostMethod:

[HttpPost]
        public ActionResult Index(Competition model)
        {
            if (ModelState.IsValid)
            {

1 Ответ

0 голосов
/ 02 марта 2012

Я не думаю, что ваш код будет компилироваться вообще. Помощник CheckBox ожидает логическое значение в качестве второго аргумента, в то время как вы передаете ему строку.

Попробуй так:

@model MyViewModel

@using (Html.BeginForm())
{
    foreach (var value in Model.InterestedIn)
    {
        <span>
            <input type="checkbox" name="interestedin" value="@Html.AttributeEncode(value)" />
            <label>@value</label>
        </span>
        <br />
    } 
    <button type="submit">OK</button>
}

Предполагается, что у вас есть следующая модель представления:

public class MyViewModel
{
    [Display(Name = "Would you be interested in receiving *")]
    public IList<string> InterestedIn { get; set; }
}

и следующий контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        IList<string> lists = new List<string>();
        lists.Insert(0, "Latest News");
        lists.Insert(1, "Special Offers");
        lists.Insert(1, "New Products");
        var model = new MyViewModel();
        model.InterestedIn = lists;
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}

Если вы хотите использовать CheckBox или, что еще лучше, помощник CheckBoxFor, вам придется адаптировать модель представления так, чтобы она больше не имела свойства IList<string>, а свойство IList<CheckBoxItemViewModel>, где CheckBoxItemViewModel другая модель представления, которая будет содержать метку и логическое свойство, указывающее, было ли выбрано это значение.

...