Подтвердить что ты не робот

Почему моя скрытая запись ввода: value = "value" вместо true/false?

У меня есть сайт MVC4, с (как часть скрытой формы):

<input name="somefield" type="hidden" value="@ViewBag.Test"/>

Значение ViewBag.Test равно true. Поле формы отправляется на входной параметр формы:

public ActionResult SomeAction(bool somefield = false, ...)

но somefield всегда false. При исследовании я вижу, что исходный код имеет:

<input name="somefield" type="hidden" value="value"/>

Однако, я знаю, что это работало. Что случилось, и что я могу сделать?

4b9b3361

Ответ 1

Это поведение изменилось между MVC3 и MVC4. В MVC3, если у вас есть:

<input name="somefield" type="hidden" someprop="@(SomeBooleanExpression)"/>

он писал бы буквально:

<input name="somefield" type="hidden" someprop="True"/>

Однако в MVC4 он следует правилам "checkbox" и т.д., поэтому, если значение true, вы получаете:

<input name="somefield" type="hidden" someprop="someprop"/>

и если он false, он полностью опускается:

<input name="somefield" type="hidden"/>

Чтобы обойти это, рассмотрите .ToString():

<input name="somefield" type="hidden"
   someprop="@(SomeBooleanExpression.ToString())"/>

который затем следует строковым правилам, а не логическим правилам.