2009-04-20 18 views
0

フォームフィールドを設定するクライアントサイドJavaScriptがあります。ページがポストバックすると、これらのフィールドはリセットされます。クライアントサイドのJSとASP.NETポストバック

これはなぜですか?ポストバックが発生したときにフィールド値が取得され、ViewStateに入れられませんか?

EDIT:ポストバック後にコードが実行される前に、Page_Load()でデバッガをブレークすると、フォームフィールドの値が空になります。

答えて

4

クライアント側の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が無効になっていると判断し、それらが部分的に有効にされ、クライアント側に実装されていると考えると、値はポストバックで使用できなくなります。

+0

ニースキャッチ。これを理解するのに少し時間がかかりました。 :) – core

1

はい。間違ったことが起こっているようです(おそらく、IsPostbackフィールドをチェックしていないOnLoadハンドラが、変更された値を上書きしているようです)。チェックする

if (!Page.IsPostBack) { 

    // Do Work 

} 
1

チェックあなたがポストバックかコールバックをしているかどうか。コールバックを実行している場合、コールバックとともに返されたフォームフィールド値は、ページが最初にクライアントに送信した値です。何らかの理由でASP.NET AJAXはこれらの値をpickleし、フォームフィールドを新たに読み込むのではなく、すべてのコールバックでそれらを送信します。

0

他の事である:私が見た中で最も一般的な問題はそうは次のように任意のサーバー側の初期化コードがIsPackBackをチェックしませんということで、サーバ側で初期化されているもの

0

フィールドにはenabled="false"が設定されています。私はフィールドをreadonly="true"に変更しました。同じことが起こります。

解決策は、JSを使用して実行時にフィールドを読み取り専用に変更することでした。

関連する問題