2

いくつかの背景

そのため、データの自動補間を行うWebアプリケーションの機能強化を完了していました。ユーザーが入力するテキストボックスはいくつかあり、その間にある他のテキストボックスには値が自動的に計算されます。自動的に計算された値を受け取るテキストボックスは、ユーザーの変更を防ぐためにreadOnlyである必要がありますが、無効にすることはできません。無効にしないと、ポストバックで送信されません。これらの各テキストボックスの横にもチェックボックスがあり、ユーザーは意識的にチェックボックスをオンにしてフィールドを書き込み可能にし、補間された値を上書きできるようにします。

ブラウザ:IE 7(これが他のブラウザでどのように動作するかわからない)

問題

readOnlyJavaScriptを使用してテキストボックスのプロパティを設定すると、テキストボックスの値は次の形式で送信されます。サーバー側(ASP.NET)myTextBox.Textで確認できますRequest.Form("myTextBox")

要素を設定ReadOnly="true"<asp:TextBox />、JavaScriptメソッドを使用しない場合、テキストボックスの値はから利用できませんmyTextBox.Text(私はそれViewStateがに到達したことはないと思います)が、フォームで送信されます:Request.Form("myTextBox")値があります。

私の質問

一体何が起こっているのですか?これは仕様によるものですか?これはブラウザの問題ですか?バグを見つけましたか?アプリを機能させるために、ページの読み込み時にテキストボックスの書き込み可能性を最初に無効にするために、追加のJavaScriptが必要になるのは面倒です。

ありがとう!

4

2 に答える 2

3

これは仕様によるものです。ASP.NETのセキュリティ機能として、サーバーで読み取り専用に設定すると、クライアントで何が起こっても読み取り専用のままになります。それらがそれをオーバーライドして実際に値を送信できるようにしたい場合は、サーバーでは実際には読み取り専用ではなく、クライアントで条件付きでのみ送信されます。チェックボックスをオンにしてサーバーの読み取り専用属性を変更するときにポストバックを実行するか、次のASP.NETコードを使用してクライアントの読み取り専用属性のみを設定することができます。

MyControl.Attributes.Add("readOnly","readOnly")
于 2009-06-30T13:12:30.197 に答える
0

了解しました。サンプルを微調整しました。問題が発生したと思います。間違っている可能性もありますが、意図したとおりに動作していると思います。

コードビハインドでフィールドをReadOnlyに設定すると、ASP:TextBoxJSでも不変になります。変更を加えたところ、変更はJSとフォームに反映されましたが、リクエストを確認しない限り、TextBoxは元のテキスト値を保持していました。あなたがしたように形作りなさい。

これはバグではないと思います。何かを完全にロックダウンしておくことは意図的なことだと思います。サーバー側での読み取り専用がぶら下がっているのは、好ましい選択のようです。

非表示の入力フィールドとスパン、またはASP:Labels(スパンとして効果的にレンダリングされる)を使用して、ユーザーが調整できない表示アスペクトを提供するものを提案できますか?

または、JSライブラリ(jQueryなど)にアクセスできる場合は、TextBoxにCSSクラスを設定し(CssClass="readonly"タグにそのようなものを含む)、選択プロセスを使用して属性を微調整することができます( jQuery、他の言語で簡単に記述できます):

$("input.readonly").attr("readonly","readonly");

そうすれば、マークアップの多くを書き直す必要がなく、JSをすばやく簡単に修正できます。

于 2009-06-29T23:41:17.520 に答える