Page_Init上的警报消息

时间:2011-07-27 13:59:38

标签: c# javascript alert code-behind page-init

我有一个由PageBase类调用的安全类(所有页面都将继承),它将用户重定向到主页或登录页面(取决于他们是否登录),如果他们试图访问他们无权查看的页面。我想通过说出像

这样的内容来提醒用户

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

或类似的东西。我知道你可以从你的代码隐藏中调用javascript来向用户显示警告。

在我的PageBase类中,(同样,所有页面都将继承),有一个常见的Page_Init(..)方法,当我尝试从那里调用我的js警报时,没有任何反应。我在代码中添加了断点,代码被命中,但用户没有得到警报。我认为这是因为Page_Init在页面的生命周期中过早地执行js,而这就是造成这个问题的原因。

有没有办法解决这个问题,而无需为每个页面添加功能?另外,这是我尝试过的两种方式:

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>");

2 个答案:

答案 0 :(得分:1)

问题不在于Page_Init上没有任何页面。问题是服务器没有向浏览器发送任何内容,因为它在Page Lifecycle中太早了。 (更多来了)

在正常情况下,即使您调用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> 

答案 1 :(得分: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);