1

PageBase クラス (すべてのページが継承する) によって呼び出されるセキュリティ クラスがあります。このクラスは、ユーザーがログインしているかどうかに応じて、ユーザーをホームページまたはログイン ページにリダイレクトします。閲覧を許可されていないページにアクセスします。次のように言って、これをユーザーに警告したいと思います。

"You are not authorized to view this page, redirecting you"

またはそのようなもの。コードビハインドからjavascriptを呼び出して、ユーザーにアラートを表示できることは知っています。

私の PageBase クラス (ここでも、すべてのページが継承されます) には共通の Page_Init(..) メソッドがあり、そこから js アラートを呼び出そうとしても何も起こりません。コードにブレークポイントを設定しましたが、コードはヒットしていますが、ユーザーはアラートを受け取っていません。これは、Page_Init がページのライフサイクルの早い段階で js を実行できないためであり、それがこの問題の原因であると考えています。

個々のページに機能を追加することなく、これを回避する方法はありますか? また、私が試した2つの方法は次のとおりです。

System.Web.UI.Page page = HttpContext.Current.CurrentHandler as System.Web.UI.Page;
System.Web.UI.ScriptManager.RegisterStartupScript(page, page.GetType(), "alert", "alert('You do not have access to this page. You are being redirected')", true);

Response.Write("<script type='text/javascript'>alert('You do not have access to this page. You are being redirected');</script>");
4

2 に答える 2

1

問題は、Page_Initにページがないということではありません。問題は、ページライフサイクルの初期段階であるため、サーバーがブラウザに何も送信していないことです。(もっと来る)

通常の状況では、Response.Writeを呼び出しても、応答データはRenderingイベントまでブラウザーに送信されません。これは、Response.Writeの直後にResponse.Flush()を呼び出すことで強制されることがよくありますが、意図しない結果を招くことがよくあります。Page_Initサイクルでは、Response.Flush()を呼び出すと、おそらく多くの問題が発生すると思います。

「リダイレクトしています」というメッセージを含む静的なhtmlページを作成し、javascrip.SetTimeoutメソッドを使用してカウントダウンし、javascriptを使用して数秒後にリダイレクトする方がよい場合があります。それが何年もの間ウェブ上で行われてきた方法です。基本クラスは、ユーザーが許可されていない場合にこのページにリダイレクトできます。

「リダイレクト」ページのコード。

<html>
 <head>
 <script type="text/javascript">
 function delayedRedirect(){
     window.location = "/default.aspx"
 }
 </script>
 </head>
 <body onLoad="setTimeout('delayedRedirect()', 3000)">
 <h2>You are not authorized to view this page, redirecting you</h2>
 </body>
 </html> 
于 2011-07-27T14:02:21.270 に答える
0

次のように、ベースページのPage_Loadイベントにロジックを実装する必要があります。

ScriptManager.RegisterStartupScript(this, this.GetType(), "keykey", "alert('You do not have access to this page. You are being redirected'); window.location='http://caracol.com.co';", true);
于 2011-07-27T15:58:50.457 に答える