フォームフィールドを設定するクライアントサイドJavaScriptがあります。ページがポストバックすると、これらのフィールドはリセットされます。クライアントサイドのJSとASP.NETポストバック
これはなぜですか?ポストバックが発生したときにフィールド値が取得され、ViewStateに入れられませんか?
EDIT:ポストバック後にコードが実行される前に、Page_Load()でデバッガをブレークすると、フォームフィールドの値が空になります。
フォームフィールドを設定するクライアントサイドJavaScriptがあります。ページがポストバックすると、これらのフィールドはリセットされます。クライアントサイドのJSとASP.NETポストバック
これはなぜですか?ポストバックが発生したときにフィールド値が取得され、ViewStateに入れられませんか?
EDIT:ポストバック後にコードが実行される前に、Page_Load()でデバッガをブレークすると、フォームフィールドの値が空になります。
クライアント側のJavaScriptから入力されるフォーム要素が無効に設定されていますか?その場合、ASP.NETは値を無視します。例えば
:このコードを実行すると
<asp:TextBox ID="TextBox1" Enabled="False" Runat="Server" />
<script type="text/javascript">
document.forms[0].elements["TextBox1"].style.disabled = false;
document.forms[0].elements["TextBox1"].value = "Value set from Javascript";
</script>
、ASP.NETは、テキストボックスが無効になっていると思うので、ポストバックでその値を破棄し、そのTextBox1.Textの値は常に空白になります。私の知る限り、この動作はすべてのフォーム要素に適用されます。 ASP.NETが無効になっていると判断し、それらが部分的に有効にされ、クライアント側に実装されていると考えると、値はポストバックで使用できなくなります。
はい。間違ったことが起こっているようです(おそらく、IsPostbackフィールドをチェックしていないOnLoadハンドラが、変更された値を上書きしているようです)。チェックする
if (!Page.IsPostBack) {
// Do Work
}
チェックあなたがポストバックかコールバックをしているかどうか。コールバックを実行している場合、コールバックとともに返されたフォームフィールド値は、ページが最初にクライアントに送信した値です。何らかの理由でASP.NET AJAXはこれらの値をpickleし、フォームフィールドを新たに読み込むのではなく、すべてのコールバックでそれらを送信します。
他の事である:私が見た中で最も一般的な問題はそうは次のように任意のサーバー側の初期化コードがIsPackBackをチェックしませんということで、サーバ側で初期化されているもの
フィールドにはenabled="false"
が設定されています。私はフィールドをreadonly="true"
に変更しました。同じことが起こります。
解決策は、JSを使用して実行時にフィールドを読み取り専用に変更することでした。
ニースキャッチ。これを理解するのに少し時間がかかりました。 :) – core