惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyberwarzone
Cyberwarzone
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
The Exploit Database - CXSecurity.com
有赞技术团队
有赞技术团队
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
GbyAI
GbyAI
A
Arctic Wolf
Simon Willison's Weblog
Simon Willison's Weblog
美团技术团队
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
NISL@THU
NISL@THU
C
Cybersecurity and Infrastructure Security Agency CISA
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
N
News and Events Feed by Topic
M
MIT News - Artificial intelligence
T
Tenable Blog
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
S
Security Affairs
T
Troy Hunt's Blog
月光博客
月光博客
SecWiki News
SecWiki News
PCI Perspectives
PCI Perspectives
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
IT之家
IT之家
F
Full Disclosure
博客园_首页
C
CERT Recently Published Vulnerability Notes
T
Threatpost
Last Week in AI
Last Week in AI
C
Cisco Blogs
H
Heimdal Security Blog
大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Attack and Defense Labs
Attack and Defense Labs
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
量子位
Know Your Adversary
Know Your Adversary
V
Vulnerabilities – Threatpost
I
InfoQ
P
Proofpoint News Feed
Y
Y Combinator Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main

博客园 - 赣江源

StreamInsight参考示例 Microsoft StreamInsight简介 GridView中的DataFormatString失效解决办法 - 赣江源 - 博客园 按照时间点还原数据库(SQL Server) 如何显示在线用户? 网站单点登录的实现思路 在服务器端提取ASP.NET控件输出的HTML 如何处理在IE7关闭时不出现选项卡提示 使用JavaScript控制UpdatePanel的更新 获取GridView单元格值的通用函数 如何在GridView将数字显示成金额格式或自定义格式? ASP.NET 2.0中使用XSLT的变化 在GridView表头显示排序方向 利用AJAX实现DropDownList与GridView做实时更新 输出时清除GridView的Style ASP.NET实现打印的方法小结 提高ASP.NET性能的一点方法 asp.net的一些小技巧 route命令详解
ASP.NET中每个页面在Load之前调用公用函数
赣江源 · 2008-04-15 · via 博客园 - 赣江源

    在ASP.NET程序的权限设计中,遇到了一个问题,需要每个页面都调用一个公用的函数,改函数需要

在每一个页面执行的时候,自动检查使用者是否有该页面的使用权限,并且需要取得该页面上相关功能权

限,并回传该页面的Title对它作修改;还需要保存使用的访问记录方便查询。
    1、用什么方式,能够在编写ASPX的时候用最少的代码可以实现这一功能;
    2、用什么方式调用公用的函数,更方便处理;
    针对这些问题,第一个想到的就是ASP2.0中的MasterPage功能,因为在asp.net2.0下基本上都会使用

到MasterPage,在MasterPage的PageLoad事件中来处理用户权限的问题,这样每个页面引用MasterPage就

能够使用了;但是经过测试后发现,MasterPage的PageLoad事件竟然是发生在ContentPage的PageLoad之

后的,这就意味着这样做,使Content Page就无法在PageLoad事件中调用公用的函数。
    在使用过程中发现当新增aspx并使用CodeFile方式时,可以看到在CodeFile的CS文件中有这样的内容

,如下:
public partial class Default : System.Web.UI.Page
{
}
其中该Class继承了System.Web.UI.Page,这样我们就可以写一个Class来代替System.Web.UI.Page;这里

我们来创建一个这样的类。
1、首先在解决方案项目上按右鍵→加入新项→选择模板[类]→名称[PageBase.cs],如果你还没有启用

App_Code的文件夹,系统提示是否新增App_Code,并将该文件放入文件夹中,确定后,会在App_Code中增

加PageBase.cs文件,内容如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for PageBase
/// </summary>
public class PageBase
{
    public PageBase()
    {
        //
        // TODO: Add constructor logic here
        //
    }
}
2、接下来让PageBase继承System.Web.UI.Page,如下:
public class PageBase : System.Web.UI.Page
这样就可以使用page的相关事件了。
3、下一步添加一些函数和属性,用来测试这些方法,代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for PageBase
/// </summary>
public class PageBase : System.Web.UI.Page
{
    Boolean _IsBrwP = false;

    public PageBase()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public string SayHello(string inStr)
    {
        return "Hello, " + inStr;
    }

    public Boolean BrwP
    {
        get { return _IsBrwP; }
        set { _IsBrwP = value; }
    }

    public void ChkBrwP(string UID)
    {
        if (UID == "li")
        {
            BrwP = true;
        }
        else
        {
            BrwP = false;
        }
    }

    private void Page_Load(object sender, EventArgs e)
    {
        Response.Write("PageBase Load.<br>");
    }
}
4、新增一个aspx页面文件,用来测试PageBase,如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="btn1" runat="server" Text="设定UID为li" OnClick="btn1_Click" /><br />
            <asp:Button ID="btn2" runat="server" Text="设定UID为liu" OnClick="btn2_Click" /></div>
    </form>
</body>
</html>
5、修改Default2.aspx.cs文件,把原本默认继承System.Web.UI.Page改为继承PageBase,如下:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default2 : PageBase
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string sUid = Request.QueryString["UID"];
        string sRc = this.SayHello(sUid);
        Response.Write("Default2.aspx Load.<br>");
        Response.Write(sRc + "<br>");
        this.ChkBrwP(sUid);
        Response.Write(this.BrwP.ToString());
    }
    protected void btn1_Click(object sender, EventArgs e)
    {
        Response.Redirect("default2.aspx?UID=li");
    }
    protected void btn2_Click(object sender, EventArgs e)
    {
        Response.Redirect("default2.aspx?UID=liu");
    }
}
6、按F5运行看测试结果。
从运行结果可以看出,PageBase的Page_Load事件在Default2.aspx的Page_Load之前,并且也可以通过this.的方式弹出PageBase定义的函数和属性进行选用。因此一些在页面Load之前要执行的公用函数代码,就可以通过这样的方式来处理。