2009-05-29 9 views
0

親ウィンドウでリンクを選択すると開くポップアップページがあります。ポップアップのページ読み込みハンドラで何らかの例外が発生した場合、エラーはポップアップページではなく親ウィンドウに移動する必要があります。ポップアップページで例外が発生しない場合、ポップアップはコンテンツのみでロードされます。ポップアップでResponse.redirectをメインページに移動する

エラーメッセージが1つのASPページから来ています。

ポップアップページのcatchブロック内のコード:

catch(Exception ex) 
{ 
    Response.Redirect(""); 
    Response.End(); 
} 

答えて

0

あなたは、ページがロードされる場所を決定するResponse.Redirectを使用することはできません。これはリクエストがサーバーに送られる前に決定されるため、サーバーコードの実行が開始された時点では、ページの送信先を変更するにはすでに遅すぎます。

ポップアップを閉じて、代わりに親ウィンドウでページを読み込みたい場合は、それを行うポップアップにJavaScriptコードを記述する必要があります。

例:

catch (Exception ex) { 
    Response.Write(
     "<html><head><title></title></head><body>" + 
     "<script>" + 
     "window.opener.location.href='/ErrorPage.aspx?message=" + Server.UrlEncode(ex.Message) + "';" + 
     "window.close();" + 
     "</script>" + 
     "</body></html>" 
    ); 
    Response.End(); 
} 
0

あなたは何ができるか、catchブロックでエラーを処理している場合 - javascriptの変数を宣言し、その変数でエラーテキストを設定します。

var errorDescription = ""; //Will hold the error description (in .aspx page). 

エラーが発生した場合、あなたはcatchブロックでこれを行う - 上記のコードは何をするか

try 
{ 
    //Code with error 
} 
catch(Exception ex) 
{ 
    ScriptManager.RegisterStartupScript(this, this.GetType(), "ErrorVariable", string.Format("errorDescription = '{0}'; CloseWindow();", ex.Message), true); 
} 

- エラーの説明を設定し、あなたのaspxページにCloseWindow()関数を呼び出します。この関数は、次のコード行を含みます。

function CloseWindow() { 
    window.parent.window.SetError(errorDescription); 
    self.close(); 
} 

この関数は、親ウィンドウの関数を呼び出してそれを閉じます。 SetError()関数は、好きなようにエラーを表示できます。

0

JavaScriptのポップアップを使用し、新しいウィンドウとフルページリクエストサイクルを使用するのではなく、AJAX経由でリクエストを行う方がよいと思います。 JavaScriptを使用すると、すべてのインタラクションを同じページに保存することができ、エラーメッセージを「メイン」インターフェイスに表示するのが簡単になります。これを行う他の多くの方法のうち、jQueryを使用して、AJAXインターフェイスとdialogプラグインを使用してモーダルダイアログを管理することができます。