Как я могу заставить CheckBox поддерживать проверенное состояние при обратной передаче в ASP.NET MVC? - PullRequest
0 голосов
/ 10 ноября 2008

У меня есть проект ASP.NET MVC с формой. В методе Action, который обрабатывает глагол POST, у меня есть пользовательская реализация IModelBinder, которая связывает данные формы с моим экземпляром модели. Если есть ошибки, я использую bindingContext.ModelState.SetAttemptedValue() и bindingContext.ModelState.AddModelError(), чтобы сохранить отправленное значение и сообщение об ошибке в ModelState.

Это прекрасно работает, и я вижу ожидаемое поведение моих элементов управления вводом, которые отображаются с Html.TextBox() (который вызывает до Html.InputHelper()). Когда я использую Html.CheckBox() (который также вызывает Html.InputHelper()), состояние моего CheckBox будет NOT , выводится в тег <input />.

Мне кажется, что Html.InputHelper() метод не использует AttemptedValue из ModelState для полей ввода типа CheckBox.

Вот код из ASP.NET MVC Html.InputHelper() метод .

Почему CheckBox предпринятьValue не выводится во входной тег. Есть ли что-то, чего мне здесь не хватает, или мне нужно вручную обработать этот случай, проверив ModelState и самостоятельно установив атрибут tag?

Обновление 11/09
Вот вызов HtmlHelpers, который я использую для вывода CheckBox:

<%= Html.CheckBox("IsDerived") %>

А вот вызов, который я использую для регистрации значения:

string isDerivedRequestValue = !string.IsNullOrEmpty(bindingContext.HttpContext.Request["IsDerived"]) ? bindingContext.HttpContext.Request.Form.GetValues("IsDerived") [0] : null;
bindingContext.ModelState.SetAttemptedValue("IsDerived", isDerivedRequestValue);

1 Ответ

1 голос
/ 10 ноября 2008

Я не уверен, что это лучший способ решить проблему или нет, но так как метод Html.InputHelper() не проверяет AttemptedValue для элементов управления CheckBox, я добавил следующее в свой контроллер, который вставляет правильное значение из ModelState в ViewData и, похоже, справляется с задачей.

ViewData["IsDerived"] = ViewData.ModelState.ContainsKey("IsDerived")
                           ? bool.Parse(ViewData.ModelState["IsDerived"].AttemptedValue)
                           : false;

Убедитесь, что вы не устанавливаете явно значение параметра isChecked при вызове Html.CheckBox(), так как это переопределит любое значение, сохраненное в ViewData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...