質問

私は背後にあるVBコードを持つ.NET ASPアプリケーションを開発しています。 2つのテキストボックスと1ボタンがあります。ボタンをクリックすると、JavaScriptを使用して新しいウィンドウを開きます(新しいウィンドウXを呼び出しましょう)。

 button.OnClientClick = "ShowWindowX();return false;"
.

showWindowx()関数は、TextBoxから両方のパラメータを渡すURLを持つ新しいウィンドウを開きます。テキストボックスに新しい値を挿入し、テキストボックスから(ボタン上ではない)をクリックすると、テキストボックスがフォーカスが発生したときはいつでも、新しい値を転記するポストバックを実行するためにポストバックを行います。サーバーへ。

問題は、3から4の変更などのテキストボックスの値を編集してすぐにボタンをクリックすると、最初にTextBoxをクリックせずに新しい値が拾われませんので、まだ入手しました。ボタンが次のようにクリックされたときにポストバックを強制するには:

 btnBBHistory.OnClientClick = "__doPostBack();ShowWindowX();return false;"
.

これはポストバックを引き起こすが、ShowWindowsX関数によって開くウィンドウを閉じるまでポストバックは完了しません。

ShowWindowx()関数が実行される前にポストバックを完全に完了するように強制的に完了させる方法について誰もが助言することができます。

事前感あり

役に立ちましたか?

解決

Ajax通話ではない限り、アプローチを完全に変更しなければならない、それはページ上のすべてを拭き取り、そしてページは更新されるでしょう。

だからこれを達成するために何をすることができますか?バックエンドで確認して、ページがポストバック通話にロードされている場合はスクリプトを追加できます。

if (IsPostBack)
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
    "ShowWindowX();", true);
.

もちろん、ShowWindowXが定義されているスクリプトをすでに登録した場合は、

POST BACKが発生するたびにウィンドウを表示したくない場合は、LocalStorageのようなグローバルストレージにフラグを設定してから、ウィンドウを開くときにチェックします。

btnBBHistory.OnClientClick = "__doPostBack();localStorage.callwin=true;return false;"
.

およびサーバー側のページのロードにはこれを行います。

if (IsPostBack)
   Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
   "if(Boolean(localStorage.callwin)){ShowWindowX();localStorage.callwin='';}",
   true);
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top