Как разрешить скрытое поле формы, автоматически сгенерированное из @ Html.CheckBoxFor - PullRequest
0 голосов
/ 19 января 2019

Всякий раз, когда я создаю логическое свойство в моей модели ASP.NET MVC и пытаюсь создать флажок, используя @ Html.CheckBox, я получаю скрытое поле формы, сгенерированное автоматически. Я знаю, что это происходит по уважительной причине, но всякий раз, когда я отправляю свою форму и получаю это значение, используя коллекцию форм, она возвращает 2 значения, когда она находится в проверенном состоянии. Это представляет значение как это - «правда, ложь». Теперь, когда я получаю значения, используя коллекцию форм, и выполняю bool.Parse (), он выдает ошибку, потому что не может проанализировать 'true, false' вместе. Есть ли способ, чтобы избавиться от скрытого поля формы или я должен попробовать что-то во время обработки запроса?

В модели

[Display(Name ="Is Enabled")]
public bool IsEnabled { get; set; }

В контроллере

public ActionResult Request(FormCollection collection) 
{
   bool valueIsEnabled=bool.Parse(collection["IsEnabled"])                  
}

На виду

@Html.CheckBoxFor(m => m.IsEnabled, new { 
   @class = "custom-input"
})

Когда я нажимаю Проверено

Ожидаемый результат - верно Фактический результат - правда, ложь

Когда я не нажимаю кнопку флажок

Ожидаемый результат - ложь Фактический результат - ложь

1 Ответ

0 голосов
/ 19 января 2019

Хорошо. Я провел небольшое исследование и обнаружил, что помощник CheckBox генерирует дополнительное скрытое поле с тем же именем, что и у флажка (это можно увидеть, просмотрев сгенерированный исходный код):

<input checked="checked" id="Visible" name="Visible" type="checkbox" value="true" />
<input name="Visible" type="hidden" value="false" />

Таким образом, оба значения отправляются в действие контроллера при отправке формы. Вот комментарий непосредственно из исходного кода ASP.NET MVC, объясняющий причины этого дополнительного скрытого поля:

if (inputType == InputType.CheckBox) {
    // Render an additional <input type="hidden".../> for checkboxes. This
    // addresses scenarios where unchecked checkboxes are not sent in the request.
    // Sending a hidden input makes it possible to know that the checkbox was present
    // on the page when the request was submitted.
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...