6

ビューに強く型付けされたモデルを使用しています。javascript を使用して値を更新する無効なテキスト ボックスがあります。テキストボックスはこれを使用してレンダリングされます

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

これにより、名前と ID が「TotalAmount」のテキスト ボックスが表示されます。TotalAmount は、このビューにバインドするモデルのプロパティでもあります。

ビュー内の値を更新する JavaScript は、関数内では次のようになります。

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

関数が呼び出され、別の編集可能なテキスト ボックスの値を変更すると、無効なテキスト ボックスに値が表示されます。ただし、このフォームを次のようにアクションメソッドに投稿すると:

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

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

使ってみた

ModelState.Remove("TotalAmount");

上記のアクションメソッドで、しかし、私がすでに考えていたように、それはうまくいきませんでした.

手がかり、ヒントはありますか?

御時間ありがとうございます....

4

5 に答える 5

25

属性を持つテキストボックスなどの HTML 入力要素disabled="disabled"は、フォームが送信されたときに値をサーバーに送信しません。ユーザーが値を変更できないようにしながら値をサーバーに送信する場合は、テキストボックスを作成できますreadonly

<%= Html.TextBoxFor(model => model.TotalAmount, new { @readonly = "readonly" }) %>
于 2012-05-04T13:13:27.733 に答える
4

無効な入力はフォーム送信で送信されません。readonly代わりに属性を使用するか、非表示の入力を試してください

于 2012-05-04T13:13:45.943 に答える
4

無効化されたフィールドは投稿されません。値をサーバーに送信する非表示のフォーム フィールドを作成し、TotalAmount と非表示のフォーム フィールドの両方を設定してみてください。サーバーでは、代わりに隠しフィールドの値を使用してください。

余談ですが、これは注文の合計のように見えるため、誰かが HTML をハッキングして製品の割引を受ける可能性を開くのではなく、サーバー上で再計算します。

編集: 他の点では、 readonly 属性を忘れていました。それもうまくいきます。

于 2012-05-04T13:15:32.873 に答える
3

readonlyではなく使用するように変更するとdisabled、同じ機能が得られますが、値が投稿されます。

于 2012-05-04T13:13:29.233 に答える
1

あなたが発見したように、ブラウザーは無効化された入力コントロールに値を送り返しません。おそらく、これを回避する最も簡単な方法は、フォーム送信にフックし、フォームが送信されているときに入力を再度有効にすることです。ユーザーは値を編集する機会がなく、リクエストの残りの部分とともに投稿される必要があります。

前回の号で説明したと思います:チェックしてください:

asp:TextBox の値を取得する

于 2013-09-01T16:13:33.207 に答える