2012-05-04 13 views
6

私は私のビューに強く型付けされたモデルを使用しています。私は値が私はJavaScriptを使用して更新無効になっているテキストボックスがあります。テキストボックスは、これは「TotalAmount」などの名前とIDを持つテキストボックスを描画このasp.net mvcが無効になったテキストボックスはJavaScriptによって更新されません新しい値を投稿しません

<%: Html.TextBoxFor(model => model.TotalAmount, new { disabled = "disabled"})%> 

を使用してレンダリングされます。 TotalAmountは、このビューにバインドするモデルのプロパティです。ビューでその値を更新する

javascriptのは、その関数内でこのようなものです:

document.getElementById('TotalAmount').value = {assigning new value here}; 

関数が呼び出さず、私は別の編集可能で、いくつかの値を変更したときに、私は無効にテキストボックスに値を見ることができますテキストボックス。しかし、私は以下のように私のアクションメソッドにこのフォームを投稿するとき:

[HttpPost] 
public ActionResult Process (ProcessVM FormPostVM) 
{ 
} 

無効にテキストボックスのプロパティ[TotalAmount]まだ古い値を持っていますが、私は変更され、編集可能なテキストボックスは、私が入力した新しい値が含まれています。無効になっているテキストボックスにJavaScriptの更新値が含まれていないのはなぜですか?

私は上記のアクションメソッドで

ModelState.Remove("TotalAmount"); 

を使用してみましたが、私はすでにそれがうまくいきませんでした考え出しとして。

手がかり、ヒントお時間を

おかげで....なフォームが送信されるときにサーバーにその値を送信することはありませんdisabled="disabled"属性を持つテキストボックスなど

+0

4答え、それらはすべて正しいです。 – tkt986

答えて

23

HTML入力要素。あなたはむしろdisabledよりreadonlyを使用するように変更した場合、これはあなたに同じを与えるべき

<%= Html.TextBoxFor(model => model.TotalAmount, new { @readonly = "readonly" }) %> 
+0

+1を設定する方法の例を読んでください – user20358

+0

@ダリンディミトロフ、あなたは言った: "...決してサーバーに値を送信する..."。これは一般的なルールですか、MVC固有ですか?また、あなたのソリューションはテキストボックス用です。 'select'要素はどうですか? –

+0

@Anar、これはASP.NET MVCとは関係ありません。基本的なHTMLです。そして、 'select'を含む全ての入力要素に当てはまります。 –

3

:あなたはまだそれを変更することからユーザーを無効にしているときにテキストボックスreadonlyを作ることができる、サーバーに値を送信する場合しかし、値を掲示してください。

4

無効フィールドが掲載されません、提出する代わりにreadonly属性を使用してみたり、非表示の入力に送信されることはありません。サーバーに値を送信する隠しフォームフィールドを用意し、TotalAmountと隠しフォームフィールドの両方を設定してください。サーバー上で、代わりに隠しフィールドの値を使用します。

これは注文合計のように見えるので、これはhtmlをハッキングしてその商品を割引する可能性を広げるのではなく、サーバで再計算するものです。

編集: 他の点では、私はreadonly属性について忘れていました。それもうまくいくでしょう。

+0

+1セキュリティチップ – user20358

1

ブラウザーは、検出されたとおり、無効な入力コントロールに値を戻しません。おそらく、これを回避する最も簡単な方法は、フォームの送信にフックし、フォームが送信されるときに入力を再度有効にすることです。ユーザーは値を編集する機会を得ることができず、残りのリクエストとともに投稿されるはずです。

私は最後の問題は、それを説明したと思う:それをチェックアウトしてください:1分で

Retrieving the value of a asp:TextBox

関連する問題