ASP.NET Core 2 MVC CheckBox для всегда возвращающего false в модели - PullRequest
0 голосов
/ 12 марта 2019

Я знаю, что было много людей, которые сталкивались с этой проблемой, но я не думаю, что они когда-либо решили ее.

У меня есть такая страница бритвы:

@model MyModel
<div>
    @using (Html.BeginForm("MyMethod", "Home", FormMethod.Get))
    {
        @Html.CheckBoxFor(model => model.MyBool)
        @Html.LabelFor(model => model.MyBool)
        <input type="submit" class="btn" value="Fire it up" />
    }
</div>

Моя модель выглядит так:

public class MyModel
{
    [DisplayName("My checkbox")]
    public bool MyBool {get; set;}
}

И мой метод в домашнем контроллере выглядит так:

public IActionResult MyMethod(MyModel model)
{
    return View();
}

Все выглядит хорошо для меня, но тогда, независимо от того, установлен ли я флажок или нет, параметр модели в методе MyMethod всегда ложен после отправки формы.

Что я делаю не так?

EDIT:

Когда я отмечаю флажок, запрос GET содержит оба значения - true и false. Я видел, как некоторые люди говорят, что MVC должен справиться с этим, но, очевидно, это не так.

1 Ответ

0 голосов
/ 13 марта 2019

Итак, когда вы не устанавливаете флажок HTML, по умолчанию отправляется значение null .Но когда вы используете HTML-помощник @Html.CheckBoxFor (model => model.MyBool) , он автоматически создает флажок для значения MyBool, как вы просили, и дополнительно @ Html.Скрытые ( "MyBool", ложь) .Что это будет делать, если MyBool не имеет никакого значения (если флажок не установлен), он передаст значение False вместо нуля.

HTML создан:

  <input id="MyBool" name="MyBool" type="checkbox" value="true">
  <input name="MyBool" type="hidden" value="false">
...