一:传统WebForm页面Page基类
传统的页面基类,基本继承自System.Web.UI.Page,如: ///
/// 共用页面基类
///
public class PageBase : System.Web.UI.Page
{}
如此继承的原因? 1:为了处理某些共同逻辑、减化代码、统一处理某些事情所需。 2:基于开发中,要用到很多用户控件、ViewState等,享受丰富的服务端控件带来的开发优势,提高开发效率。 3:早已习惯WebForm开发,虽然最近MVC流行。
我在一些内部系统或站点管理后台上,也经常使用,如我用它来处理以下内容: [url=][/url]
1:用户权限 2:常见方法封装,包括服务端方法、脚本方法。 3:列表控件Repeater/DataList/GridView的进一步控制:如:光棒效果[就是移动时行的高亮显示]、列头翻译,列的隐藏控制等。 4:其它...... [url=][/url]
再简单看一下System.Web.UI.Page,发现如下的继承: [url=][/url]
public class Page : TemplateControl, IHttpHandler
{
// 摘要:
// 一个定义呈现的页中的 EVENTARGUMENT 隐藏字段的字符串。
[EditorBrowsable(1)]
public const string postEventArgumentID = "__EVENTARGUMENT";
//
// 摘要:
// 一个定义呈现的页中的 EVENTTARGET 隐藏字段的字符串。
[EditorBrowsable(1)]
public const string postEventSourceID = "__EVENTTARGET"; // 摘要:
// 初始化 System.Web.UI.Page 类的新实例。
public Page(); //省略N行... } [url=][/url]
简说: 为了实现和丰富的服务端控件打交道,继承了TemplateControl这个丰富的控件基类,同时引入的ViewState。方便的同时,也被世人所鄙视,甚至把网站运行慢的原因,都推到ViewState身上。
保守估计也许可能应该或许有部分人群,使用mvc的原因,仅为mvc没viewstate而已,和干净点的html生成 举个小例子: [url=][/url]
很多人看到 秋色园QBlog的站点,点击看html源代码,在干炼的html中寻不到ViewState的影子时, 就发电来问: 呀的~没有ViewState的就是mvc? [url=][/url]
没有ViewState的,不一定是mvc,可能正如你这样处理: 1:输出前截断输出,对html进行替换处理后,再输出干净的html 2:利用1的方法,把输出的html保存成文件 3:请求中可以缓存html或直接请求html
秋色园不是mvc,何以生成的html没有ViewState,输出前替换了ViewState?答案:No。
秋色园的基类设计,仅是退一步而已,和System.Web.UI.Page一样,继承自:IHttpHandler。 如: public abstract class HttpCustom : IHttpHandler
{}
以下内容:
1:新建类库,为了自己好找,名字还以UrlRewrite开头了,叫:UrlRewriteModule
2:把Class1.cs更名为HttpCustom,并继承自IHttpHandler,如下图: 正如上图你看到的,截图时类少写了一个关键字:abstract,哈哈~
3:创建自己的页面生存周期方法,大体如下: 说明: 从上面的示例中,我们创建了属于自己的页面生存周期,把那个经常属于面试题的Page的页面生存周期都仍一边去。
4:接下来,再做点事,把重点引到ashx处理程序中,并抛弃aspx
4.1:在原来的站点UrlRewriteDemo中添加对项目UrlRewriteModule的引用 4.2:添加Default.ashx处理程序,继承自HttpCustom,并重写Page_Load方法: 4.3:把UrlRewrite库的重定位,从之前的定位到Defaut.aspx改成Default.ashx
5:一切就绪,F5运行看效果 再来一张: 经过上面的一折腾: 我们实现了属于自己的页面生存周期,并以比较让人熟悉的Page_Load方法,分给各个ashx处理程序,当然,基类要做的事情,还有好多,比较好多方法都是private,说明要自己处理,后节待续。
|