Страница веб-сетки MVC3 / Проблема сортировки с CheckBox в другом месте страницы - PullRequest
3 голосов
/ 17 ноября 2011

У меня есть флажок на моей странице, созданный так:

@Html.CheckBoxFor(x => x.MyBoolValue)   

Ниже у меня есть WebGrid с сортировкой и подкачкой, но при этом я получаю исключение System.InvalidOperationException:

The parameter conversion from type 'System.String' to type 'System.Boolean' failed. See the inner exception for more information.

Внутреннее исключение:

{"true,false is not a valid value for Boolean."}

Я знаю, что это связано с привязкой CheckBox и скрытого значения. На странице GET я имею дело с этим, используя Contains ("true") в значении строки запроса, но как я могу это сделать, когда обновляется WebGrid?

Ответы [ 4 ]

3 голосов
/ 17 ноября 2011

MVC создает два входа на @Html.CheckBoxFor(x => x.MyBoolValue). Один флажок и одно скрытое поле со значением false.

Он (MVC;)) гарантирует, что, даже если вы не установите флажок, переменная существует Поэтому, если вы установите флажок, значение переменной будет true,false и false, если нет.

сделать это:

<input type="CheckBox" name="MyBoolValue" value="@Model.MyBoolValue"/>

или создайте пользовательский механизм связывания моделей, который обрабатывает это.

Связывание пользовательской модели ASP.NET MVC

1 голос
/ 19 мая 2013

Если вы хотите сохранить все стандартные функции валидаторов или связывателей, а скрытое поле вас как-то беспокоит.Вы можете использовать это:

<input type="CheckBox"@(Model.BoolProperty ? " checked=\"checked\"" : string.Empty) name="BoolProperty" value="true"/>
0 голосов
/ 20 марта 2014

Проблема в названии параметра вашего действия:

public ActionResult Product(ProductModel model); 

Например, следующее исправит вашу проблему:

public ActionResult Product(ProductModel request); 
0 голосов
/ 05 апреля 2013

Я обнаружил, что удаление значения из ModelState решает эту проблему и, по-видимому, не вызывает никаких побочных эффектов - возможно, кто-то может указать, если я что-то пропустил?

В моем контроллере я простоadd

ModelState.Remove("MyBoolValue");

Что означает, что

@Html.CheckBoxFor(x => x.MyBoolValue)   

не вернется к использованию значения модели, если я не ошибаюсь?

...