2012-05-08 11 views
4

autocomplete属性がoffに設定されたフォームがあります。フォームが送信されるとFirefoxはオートコンプリートをオフにしても隠し入力をキャッシュしています

<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"> 

、この値はインクリメントされる。この形態の内部

は、(無関係であるべきであるASP.NET MVCの Html.HiddenFor()方法を用いて生成された、しかし、)非表示の入力要素がありますモデルはビューに戻されます。ステータス値をページに書き込むと、値が正しくインクリメントされていることがわかります。

ただし、この非表示の入力フィールドは常にキャッシュされます。正しい値を得ることは決してありません。私は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) 
} 
+0

コントローラーアクション、具体的にはインクリメントされている部分、およびおそらくビューの投稿はどうですか? –

+0

@AaronDaniels - 私はシナリオにあまりにも具体的な質問をしたくなかったが、いくつかのコードサンプルを追加した。私はこれを他のプロパティ(文字列など)でテストしました。私はコントローラの値でハードコーディングを試みましたが、隠れた入力はまだ更新されませんでしたが、HTML応答に値を書き込むと、私は必要な値を見ています。モデル*は正しい値を得ています。 –

答えて

3

この記事によると、このようなHiddenForなどhere HTMLヘルパーは常に最初の投稿を使用します。値の後にモデルの値を入力します。

あなたが言ったように、ページに値を書き込むと、それが増分されているのを見ることができますが、ヘルパーは以前に投稿された値を使用しています。

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

また、別のオプションではHiddenForヘルパーを使用していない可能性がありますが、代わりに隠しフィールドを作成することをお勧めします。これと同様に:それはあなたの問題のように見える

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

いずれかの方法は、同様の状況に基づいています。

+0

ご協力ありがとうございます。私は文字列でプロパティ名をハードコードしたくないので、これを解決するために 'Clear()'メソッドを使うつもりです。 –

関連する問題