Как я могу получить Html.CheckBox () как логическое значение во время POST в пользовательском IModelBinder? - PullRequest
1 голос
/ 09 ноября 2008

Я использую Html.CheckBox(). Полученный HTML-код:

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

На сервере у меня есть действие, которое принимает информацию о публикации формы и использует собственный IModelBinder для привязки результатов формы к одной из моих моделей. Вот фрагмент кода, который я запускаю в IModelBinder:

bool isMultiGraph;
if (!bool.TryParse(bindingContext.HttpContext.Request["IsMultiGraph"], out isMultiGraph))
    bindingContext.ModelState.AddModelError("IsMultiGraph", "Invalid boolean for \"IsMultiGraph\""); //this should not ever happen unless someone is programatically posting
result.IsMultiGraph = isMultiGraph;

Проблема в том, что, поскольку Html.CheckBox() отображает флажок, а также скрытое поле ввода, если я изменяю состояние текстового поля, значение обратной передачи удваивается (т. Е. "True, false").

Я понимаю, почему это делается, и я ищу лучший способ проанализировать текущее значение CheckBox во время обратной передачи (check = true, unchecked = false). Есть ли в MVC другой вспомогательный метод для этого или я должен написать свой собственный?

1 Ответ

3 голосов
/ 09 ноября 2008

Один из способов - использовать метод GetValues класса NameValueCollection, чтобы получить первое значение свойства массива, например:

bindingContext.HttpContext.Request.Form.GetValues("IsMultiGraph")[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...