1

ASP.Netを使用しているときに、絶望することがあります。これは、あるべきではない別の問題です。

WebフォームにはASPテーブルがあります。ASPテーブルには、変更を加えているユーザーコントロールがあります。ASPテーブルには、テキストボックスがあります。これまでのところ、異常なことは何もありません。

背後のコードでは、Page_Loadの一部として、JavaScriptを登録するためにテキストボックスのClientIDにアクセスする必要があります...そのため、JavaScriptは必要なすべてを実行しているようです。みんな幸せです。

いいえ、明らかに誰もが満足しているわけではありません。ASP.Net自体は非常に不幸です。

ClientIDにアクセスすると、ソースに表示されるIDは次のとおりです。

myControl_myTextBox

ClientIDにアクセスする行をコメントアウトすると、IDは次のようにレンダリングされます。

ctl00_BodyPlaceHolder_myControl_myTextBox

ClientIDにアクセスする行は次のようになります。

jsBuilder.AppendFormat(@"var filter = new TBFilter($(""#{0}"")[0]);", myTextBox.ClientID);

これ自体は気になりませんが、ポストバックを壊すという事実は気になります!そのテキストボックスに何かを入力して送信ボタンを押すと(ページに送信ボタンがあります!)、ページが再読み込みされますが、デフォルト値がテキストボックスに戻され、元の値が完全に無視されます。狂気-私は特に奇妙で普通ではないことを何もしていませんが、なぜそれがポストバックを壊したのですか?

4

1 に答える 1

3

ページの読み込みに登録するJavaScriptは、ポストバックでは発生しないはずのことを実行しますか?その場合は、をチェックして、Page.IsPostbackいつ使用するかを制御する必要があります。

Page_Loadまた、ページのライフサイクルでは、コントロールのポストバックイベント(たとえばClick、ボタンのイベント)の前に発生することにも注意してください。したがって、登録するJavaScriptコードがイベントの結果に依存する場合は、イベント内(そのボタンをクリックしたときにのみ発生する場合)またはイベント(常に発生する場合)Clickのいずれかに登録する必要があります。ClickPage_PreRender

編集:
Page_Loadの後に、クライアントIDの作成方法にいくつかの変更が加えられている可能性もあります。Page_PreRenderすべてがロードを完了していることを確認するために、イベントでそれを行うのが最善かもしれません。

于 2009-09-10T09:38:21.673 に答える