1

次の Razor マークアップを使用してPageCount値をクライアントに送信しようとすると、入力の値が 0 としてレンダリングされます。

@using (Html.BeginForm("Index", "Gallery", FormMethod.Post, new { id = "search-form" }))
{
    @Html.HiddenFor(m => m.PageCount)

PageCountこれは、値が 2 であるにもかかわらず、次のようにレンダリングされます。

<input data-val="true" data-val-number="The field PageCount must be a number." data-val-required="The PageCount field is required." id="PageCount" name="PageCount" type="hidden" value="0">

次のように、ほぼすべてのプレーンな HTML に戻ると、次のようになります。

<input type="hidden" name="PageCount" id="PageCount" value="2">

Razor の隠れた入力に関するおかしな動作はありますか、それとも何ですか?

4

1 に答える 1

4

PageCountPOSTコントローラーアクションで値を設定していますか?その場合は、ModelStateから古い値を削除したことを確認してください。

[HttpPost]
public ActionResult Index(SomeViewModel model)
{
    ModelState.Remove("PageCount");
    model.PageCount = 2;
    return View(model);
}

この理由は、HTMLヘルパーは、モデルからの値ではなく、バインド時に最初にPOSTされた値を使用するためです。したがって、コントローラーアクションで古い値を変更する場合は、ModelStateから古い値を削除する必要があります。

そして、それはHiddenForヘルパーだけに限定されません。これが、入力フィールドを生成するすべてのHTMLヘルパーが機能する方法です。

于 2012-10-01T19:07:25.933 に答える