Недостаточно места в комментарии. Вы говорите, CheckBoxFor
выводит этот код:
<input type="hidden" value="true" name="Luxury">
Мне очень трудно понять, как это происходит, учитывая, что код для генерации этого вспомогательного поля выглядит следующим образом (в InputHelper
, вызываемом CheckBoxHelper
, вызываемым CheckBoxFor
):
if (inputType == InputType.CheckBox) {
StringBuilder inputItemBuilder = new StringBuilder();
inputItemBuilder.Append(tagBuilder.ToString(TagRenderMode.SelfClosing));
TagBuilder hiddenInput = new TagBuilder("input");
hiddenInput.MergeAttribute("type",
HtmlHelper.GetInputTypeString(InputType.Hidden));
hiddenInput.MergeAttribute("name", fullName);
hiddenInput.MergeAttribute("value", "false"); // <-- Notice this
inputItemBuilder.Append(hiddenInput.ToString(TagRenderMode.SelfClosing));
return MvcHtmlString.Create(inputItemBuilder.ToString());
}
Обратите внимание, что он явно устанавливает value
в значение "false" - он не получает значение для скрытого поля откуда-либо Поэтому, если у вас нет собственного CheckBoxFor
метода - или каких-то других махинаций, - я не понимаю, как это могло бы стать «правдой».
Но да, если этот «скрытый» ввод равен «истина», Luxury
всегда будет истинным.
Когда флажок установлен, значение флажка - и скрытое значение, которое MVC будет игнорировать - отправляется (Luxury=true&Luxury=true
- или эквивалент POST).
Если этот флажок снят, отправляется только скрытое значение (Luxury=true
).
Вот почему скрытый ввод должен быть false
- так что Luxury=false
отправляется, когда флажок снят. Опять же, вопрос в том, почему не это false
?
Объяснение этому лежит где-то в вашем коде, которого мы не видели.