4

autocomplete属性がに設定されたフォームがありますoff

このフォーム内には、非表示の入力要素があります(ASP.NET MVCのHtml.HiddenFor()メソッドを使用して生成されますが、これは関係ありません)。

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

フォームが送信されると、この値が1つインクリメントされ、モデルがビューに返されます。ページにステータス値を書き込むと、値が正しくインクリメントされていることがわかります。

ただし、この非表示の入力フィールドは常にキャッシュされます。正しい値を取得することはありません。input要素に直接属性を設定しようとしautocompleteましたが、成功しませんでした。

この隠しフィールドを取得して正しい値を取得するにはどうすればよいですか?Javascriptは使いたくないです。

編集:より多くのコードを提供しています...

コントローラ

//This code is being executed, and the status is being incremented.
shippingOrder.Status = (shippingOrder.Status != (int)OrderStatus.Closed) ? shippingOrder.Status + 1 : shippingOrder.Status;

意見

@using (Html.BeginForm("Number", "Order", FormMethod.Post, new { id = "orderSummary", autocomplete = "off" })) {
    ...
    @Html.HiddenFor(m => m.Status)
}
4

1 に答える 1

3

this post hereによると、htmlヘルパーHiddenForは常に最初に投稿された値を使用し、その後モデルの値を使用します。

あなたが言ったように、ページに値を書き込むと、値が増加していることがわかりますが、ヘルパーは以前に投稿された値を使用しています。これは意図した動作です。

リンクは、新しい値を割り当てる前にModelState.Remove("Status")またはを使用することを示唆しています。ModelState.Clear()

HiddenForまた、ヘルパーを使用せずに、隠しフィールドを自分で作成するという別のオプションがあることも示唆しています。これに似ています:

<input type="hidden" name="Status" value="@Model.Status" />

いずれにせよ、あなたの問題は同様の状況に基づいているようです。

于 2012-05-08T23:02:11.567 に答える