【发布时间】:2011-03-28 22:53:50
【问题描述】:
如何在每个 aspx 文件中运行脚本?
这是我想在每个 aspx 文件的开头运行的内容。我该怎么做?
我不想将它复制并粘贴到我拥有的每个文件中
if (CUser.LoginID == "")
{
Response.Redirect("login.aspx");
}
【问题讨论】:
标签: asp.net
如何在每个 aspx 文件中运行脚本?
这是我想在每个 aspx 文件的开头运行的内容。我该怎么做?
我不想将它复制并粘贴到我拥有的每个文件中
if (CUser.LoginID == "")
{
Response.Redirect("login.aspx");
}
【问题讨论】:
标签: asp.net
最简单的方法可能是创建一个从System.Web.UI.Page 继承的基页类,并在Page_Load 中运行此代码。然后,将每个页面更改为从基页面类继承。然后,任何时候页面加载,都会在基类和页面类中执行Page_Load。
执行此操作的更好方法可能是实现HttpModule,但稍微复杂一些。 HttpModule 背后的想法是它会拦截请求,做一些自定义的事情,然后像往常一样传递请求。
【讨论】:
您可能希望为此使用HTTP module。
HTTP 模块为 Web 应用程序注册,并在整个请求生命周期的特定时间点接收事件。
由于这看起来与站点身份验证有关,您可以使用 AuthenticateRequest 事件检查您的 CUser.LoginID 属性并在必要时重定向。
【讨论】:
创建一个 BasePage.cs 类:
public class BasePage:System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
if (CUser.LoginID == "")
{
Response.Redirect("login.aspx");
}
}
}
然后每个 aspx 文件都从:
public partial class pagename: System.Web.UI.Page
到
public partial class pagename: BasePage
你就完成了。它应该适合你。如果用户未登录,它非常适合我的用户登录跟踪和重定向。
【讨论】:
如果您想对页面请求中的用户进行身份验证,正如您的代码所建议的那样,您应该查看 asp.net 表单身份验证。
http://www.asp.net/security/tutorials/an-overview-of-forms-authentication-cs
如果您想在每个页面请求上运行任意一组函数,您可以:
1) 创建一个继承自 System.Web.UI.Page 的基本页面,覆盖 OnInit 方法并将您的代码粘贴在其中。确保您的页面现在继承自该新的基本页面。
或
2) 通过在 Application_BeginRequest 方法中添加您的代码来修改 Global.asax.cs。
【讨论】:
我可以直接回答你的问题。但是,通常的做法是将身份验证重定向放在 web.config 中。它会在这样的部分中:
<authentication mode="Forms">
<forms name=".SAMPLESITEAUTH" loginUrl="~/Login.aspx" protection="All" timeout="20" slidingExpiration="true" path="/" cookieless="UseCookies"></forms>
</authentication>
用户将被重定向到 loginUrl 中列出的 url。
【讨论】: