59

(非表示のフォームの一部として) 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"/>

ただし、これが機能していたことは知っています。何が起こったのですか? どうすればよいですか?

4

1 に答える 1

78

この動作は、MVC3 と MVC4 の間で変更されました。MVC3 では、次の場合:

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

それは非常に文字通りに書くでしょう:

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

ただし、MVC4 では「チェックボックス」などの規則に従うため、値が の場合は次のtrueようになります。

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

もしそうなら、それはfalse完全に省略されます:

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

これを回避するには、以下を検討して.ToString()ください。

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

次に、ブール規則ではなく文字列規則に従います。

于 2012-11-19T13:55:10.570 に答える