Метод Razor ViewEngine HTML.Checkbox создает скрытый ввод. Зачем?
Я написал код ниже на моей странице просмотра;
@Html.CheckBox("ChxName",true)
и я получил следующий результат:
<input checked="checked" id="ChxName" name="ChxName" type="checkbox" value="true" />
<input name="ChxName" type="hidden" value="false" />
почему есть элемент ввода, названный так же, что и флажок?
Ответы
Ответ 1
Не отмеченные флажки не размещены, поэтому скрытое поле (установленное как false) позволяет привязке модели по-прежнему работать.
Посмотрите на Request.Form на пост. Если флажок установлен, вы увидите:
ChxName=true&ChxName=false
Модельное связующее использует первое значение.
и если флажок не установлен, вы увидите:
ChxName=false
Ответ 2
ericvg объяснил это хорошо.
Ручной подход таков:
bool IsDefault = (Request.Form["IsDefault"] != "false");
Ответ 3
Или используйте Contains ( "true" ), который я нахожу немного опрятным...
bool myCheckBoxValue = Server.HtmlEncode(Request.QueryString["MyCheckBoxValue"]).Contains("true");