C# Page用于各页面继承功能实例

本文实例讲述了C# Page用于各页面继承功能的实现方法。分享给大家供大家参考。具体方法如下:

IBasePage.cs文件如下:

代码如下:

/// <summary>
/// 用于页面或用户控件
/// </summary>
public interface IBasePage
{
        /// <summary>
        /// 数据缓存类
        /// </summary>
        DbCache CacheHelp { get; }

/// <summary>
        /// 页面视图,用于页面级别访问,模仿MVC
        /// </summary>
        ViewDataDict ViewData { get; }

/// <summary>
        /// 获取DataTable.Rows,此方法不会出错异常
        /// </summary>
        /// <param name="pName">数据名称</param>
        /// <returns></returns>
        DataRowCollection ViewDataRows(string pName);

/// <summary>
        /// 1:true否则false
        /// </summary>
        /// <param name="pName"></param>
        /// <returns></returns>
        bool IsViewData(string pName);

/// <summary>
        /// URL参数类
        /// </summary>
        UrlQuery UQ { get; }

/// <summary>
        /// 页面搜索关键词,搜索关键词是最基本功能,故在这里放一个字段
        /// </summary>
        string searchStr { get; set; }

/// <summary>
        /// 权限使用次数
        /// </summary>
        int UserFunCount { get; set; }

/// <summary>
        /// 数据库链接次数
        /// </summary>
        int DbCount { get; set; }

/// <summary>
        /// 用与判断增加style,js等是否已重复添加
        /// </summary>
        /// <param name="pName"></param>
        /// <returns></returns>
        TempListHandler TempList { get; }
}

BasePage.cs文件如下:

代码如下:

/// <summary>
/// 整站页面基础类
/// </summary>
public class BasePage : System.Web.UI.Page, IBasePage
{
        private static readonly DataRowCollection EmptyRows = new DataTable().Rows;

private DbCache cacheHelp;
        private ViewDataDict viewData;
        private ViewDataDict viewDataM;
        private int userFunCount = 0;//权限使用次数
        private int dbCount = 0;//数据库连接次数

private TempListHandler tempList;

protected bool IsOpenXingNengTongji = true;

#region 搜索关键词
        //private string _searchStr;
        public string searchStr
        {
            get
            {
                //if (this._searchStr == null)
                //{
                //    return string.Empty;
                //}

return ViewData["keyword"].ToString();
            }
            set
            {
                //this._searchStr = value;
                ViewData["keyword"] = value;
            }
        }
        #endregion

#region 将数据保存在页面控件里 ViewDataPage
        /// <summary>
        /// 将数据保存在页面控件里
        /// </summary>
        public string ViewDataPage
        {
            get
            {
                return Req.Form("__viewdatapage");
            }
            set
            {
                this.ClientScript.RegisterHiddenField("__viewdatapage", value);

//this.ClientScript.RegisterClientScriptBlock(this.GetType(), "__urlreferrer", "<input id=\"__urlreferrer\" name=\"__urlreferrer\" type=\"hidden\" value=\"" + value + "\" />");
            }
        }
        #endregion

public BasePage()
        {
            cacheHelp = new DbCache();
            viewData = new ViewDataDict();
            viewDataM = new ViewDataDict("model_");

tempList = new TempListHandler();
        }

private DateTime __time1;
        private DateTime __time2;
        private static int __i = 0;

#region 跟根URL重写获取参数
        /// <summary>
        /// 跟根URL重写获取参数
        /// </summary>
        private UrlQuery _UQ;

protected override void OnInit(EventArgs e)
        {
            _UQ = new UrlQuery(true);

__time1 = DateTime.Now;

base.OnInit(e);
        }

protected override void OnPreInit(EventArgs e)
        {
            //"OnPreInit".WriteLine();
            base.OnPreInit(e);
        }
        #endregion

#region 基本信息统计
        protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
            //"Render".WriteLine();
            base.Render(writer);
            __i++;
            __time2 = DateTime.Now;
            TimeSpan ts = __time2 - __time1;

if (IsOpenXingNengTongji)
                Response.Write(@"<div style=""text-align:center;color:#ccc"">Number:" + __i + ", Time:" + ts.TotalMilliseconds + "ms, DB=" + this.dbCount + ",fun=" + this.userFunCount + "</div>");
        }
        #endregion

protected override void OnUnload(EventArgs e)
        {
            //"OnUnload".WriteLine();
            base.OnUnload(e);
        }

#region 将搜索到的结果为醒目显示
        /// <summary>
        /// 将搜索到的结果为醒目显示
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public string ReplaceSearchText(object str)
        {
            if (searchStr == null || searchStr.Length == 0)
                return str.ToString();

//return str.ToString().Replace(searchStr, "<strong style=\"color:#F00\">" + searchStr + "</strong>");

return Regex.Replace(str.ToString(), Regex.Escape(searchStr), "<strong style=\"color:#F00\">" + searchStr + "</strong>", RegexOptions.IgnoreCase);
        }
        #endregion

#region IBasePage 成员
        /// <summary>
        /// 数据缓存类
        /// </summary>
        public DbCache CacheHelp
        {
            get { return this.cacheHelp; }
        }

/// <summary>
        /// 页面视图,用于页面级别访问,模仿MVC
        /// </summary>
        public ViewDataDict ViewData
        {
            get { return this.viewData; }
        }

/// <summary>
        /// 页面视图(Model),用于页面级别访问,模仿MVC
        /// </summary>
        public ViewDataDict ViewDataM
        {
            get { return this.viewDataM; }
        }

/// <summary>
        /// 获取DataTable.Rows,此方法不会出错异常
        /// </summary>
        /// <param name="pName"></param>
        /// <returns></returns>
        public DataRowCollection ViewDataRows(string pName)
        {
            DataTable dt = ViewData[pName] as DataTable;

if (dt == null)
            {
                return EmptyRows;
            }
            return dt.Rows;
        }

public bool IsViewData(string pName)
        {
            return viewData[pName].ToString() == "1";
        }

public UrlQuery UQ
        {
            get { return this._UQ; }
        }

///// <summary>
        ///// 获取系统配置
        ///// </summary>
        ///// <param name="key"></param>
        ///// <returns></returns>
        //public string SysConfig(string key)
        //{
        //    return WConfigBLL.GetValue(key).ToString();
        //}

public TempListHandler TempList
        {
            get { return this.tempList; }
        }

public int UserFunCount
        {
            get { return this.userFunCount; }
            set { this.userFunCount = value; }
        }

public int DbCount
        {
            get { return this.dbCount; }
            set { this.dbCount = value; }
        }
        #endregion

#region ITrace 成员
        //private int dbConnectionCount;
        ///// <summary>
        ///// 数据库连接次数
        ///// </summary>
        //public int DbConnectionCount
        //{
        //    get
        //    {
        //        return this.dbConnectionCount;
        //    }
        //    set
        //    {
        //        dbConnectionCount = value;
        //    }
        //}

#endregion

#region 获取或设置提交后返回的路径,若未指定,则是当前url
        /// <summary>
        /// 获取或设置提交后返回的路径,若未指定,则是当前url
        /// </summary>
        public string UrlReferrer
        {
            get
            {
                string s = Req.Form("___urlreferrer");
                if (s.Length == 0)
                {
                    s = ViewData["___urlreferrer"].ToString();
                }

if (s.Length == 0)
                {
                    s = Request.Url.ToString();
                }

return s;
            }
            set
            {
                ViewData["___urlreferrer"] = value;

this.ClientScript.RegisterHiddenField("___urlreferrer", value);\" type=\"hidden\" value=\"" + value + "\" />");
            }
        }
        #endregion
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C#基础继承和多态详解

    继承 在现有类(称为基类.父类)上建立新类(称为派生类.子类)的处理过程为继承.派生类能自动获取基类(除了构造函数和析构函数外的所有成员),可以在派生类中添加新的属性和方法扩展其功能. 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Web; public class Person{ private string _id;    public string id   

  • C#中面向对象编程机制之继承学习笔记

    继承反应了类和类之间的关系. 世界上很多事物都是有共性的,共性的那一部分我们就抽象为基类,用于派生其它类,这样提高了代码的复用性,使得代码的结构清晰易读,而且易于代码的扩展和维护. C#的继承只能继承自一个基类,这一点不同于C++的继承. C#的继承具有传递性,即B继承自A,C继承自B,则C具有A的所有特性. C#的继承隐式为public的. 假如不在派生类构造器中显示调用一个基类构造器,编译器会自动插入对基类的默认构造器的一个调用,然后才会执行派生类构造器中的代码, 如果基类没有默认的构造器,

  • C# 泛型的简单理解(安全、集合、方法、约束、继承)分享

    前言 泛型允许你在编译时实现类型安全.它们允许你创建一个数据结构而不限于一特定的数据类型.然而,当使用该数据结构时,编译器保证它使用的类型与类型安全是相一致的.泛型提供了类型安全,但是没有造成任何性能损失和代码臃肿.在这方面,它们很类似于C++中的模板,不过它们在实现上是很不同的. 使用泛型集合 .NET 2.0的System.Collections.Generics 命名空间包含了泛型集合定义.各种不同的集合/容器类都被"参数化"了.为使用它们,只需简单地指定参数化的类型即可. 复制

  • 详解C#面相对象编程中的继承特性

    继承(加上封装和多态性)是面向对象的编程的三个主要特性(也称为"支柱")之一. 继承用于创建可重用.扩展和修改在其他类中定义的行为的新类.其成员被继承的类称为"基类",继承这些成员的类称为"派生类".派生类只能有一个直接基类.但是,继承是可传递的.如果 ClassB 派生出 ClassC,ClassA 派生出 ClassB,则 ClassC 会继承 ClassB 和 ClassA 中声明的成员. 注意 结构不支持继承,但可以实现接口. 从概念上来

  • C#中实现多继承的方法

    近日看到了一个贴子,就是在C#语言中,如何实现多继承的问题.相信涉猎c#不多的人(像我这样的菜鸟),一看就觉得很可笑,c#肯定是不能实现多继承的啊.都知道在c++中因为实现多继承会有很多的歧义问题,所以在c#中就把多继承给取消了,而用接口来实现!但是想想,如果是初学者肯定不会不会问这样的问题.肯定是个高手,然后就开始上网查资料!然后发现真的可以实现! 说起多继承,首先大家可以想想这个问题:你知道在C#中怎么实现多继承吗? 主流的答案无非2种. 答案一:用接口啊,一个类可以继承自多个接口的. 答案

  • 浅谈C# 类的继承

    继承 一个类可以继承自另一个类.在 C#中,类与类之间只存在单一继承.也就是说,一个类的直接基类只能有一个.当类与类之间实现继承的时候,子类可以将它的直接基类的所有成员当做自己的成员,除了类的静态构造方法.实例构造方法和析构方法.但是,虽然基类的所有成员都可以当做子类的成员,但是如果基类的成员设置了不同的访问权限,则派生类可以访问的成员也随之不同.C#的继承是可以传递的,如果类C从类B派生,而类B从类A派生,则类C将继类B的所有成员,也继承类A的所有成员(各个基类的静态构造方法.实例构造方法和析

  • C# 面向对象三大特性:封装、继承、多态

    面向对象有封装.继承.多态这三个特性,面向对象编程按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,通过对消息的反应来完成任务.这种编程方法提供了非常强大的多样性,大大增加了代码的重用机会,增加了程序开发的速度,将具备独立性特制的程序代码包装起来,修改部分程序代码时不至于会影响到程序的其他部分. 1.封装 每个对象都包含它进行操作所需要的所有信息,封装只公开代码单元的对外接口,而隐藏其具体实现,尽量不对外公开代码.使用封装有很多好处,从设计角度来讲,封装可以对外屏蔽一些

  • C#中事件的继承实例分析

    通常来说,C#中的子类无法调用父类的事件,但是可以通过在父类中创建一个方法来调用父类的事件,而子类通过调用父类的方法来触发事件. 具体实现代码如下: class parent { protected string name; public event Handle OnEvent; protected SendEvent(HandleArgs args) { if (OnEvent != null) { OnEvent(this, args); } } } class clild : paren

  • c#继承与多态使用示例

    继承和多态 派生类具有基类所有非私有数据和行为以及新类自己定义的所有其他数据或行为,即子类具有两个有效类型:子类的类型和它继承的基类的类型. 对象可以表示多个类型的能力称为多态性. 多态性示例 复制代码 代码如下: public class Parent    {        public Parent() { }        public void MethodA()        {            Console.WriteLine("调用MethodA()");   

  • c#继承中的函数调用实例

    本文实例讲述了c#继承中的函数调用方法,分享给大家供大家参考.具体分析如下: 首先看下面的代码: 复制代码 代码如下: using System;   namespace Test {     public class Base     {         public void Print()         {             Console.WriteLine(Operate(8, 4));         }           protected virtual int Ope

随机推荐