• ASP.NET页面提前处理问题


    1、.Net的HTTP请求

    .NET与ASP的运行机制有很大不同.

    ASP的请求与响应是,ASP页面被请求,然后逐行解释.是基于过程的.最多是包含了文件,需要先引入文件罢了.

    而.Net,在页面被请求后,首先是加载HTTP Module,这不是本文的重点.然后再加载HTTP Handler.这也不是本文的重点.加载的这两项,都需要在Webconfig文件中配置.大家知道的URL转址就是这么实现的.在完成这些之后才开始给出响应的页面.

    在给出响应页面的工作中,.Net就表现出和ASP的最大区别来..Net是面向对象的语言,是基于类的语言.没有类很难写出有意义的.Net程序.如果写出来,也就是个ASP的翻版.

    2、.NET中基本文件结构(继承关系)
    首先大家看到无论在1.1还是2.0中,用VS创建的网站每个aspx文件都对应一个cs文件(或者vb等其它语言).而cs文件里的类一般和文件同名,如果遇见关键字的情况才会自动使类名前加个'_',例如:_Default.创建的这个cs文件继承自System.Web.UI.Page类,而且只能\必须继承该类.原因就是aspx文件是继承cs文件的.

    就拿Default.aspx,Default.aspx.cs文件来说.
    Default.aspx.cs里包含了类 _Default,继承字System.Web.UI.Page
    通过

        public class _Default : System.Web.UI.Page
        
    {
            
    private void Page_Load(object sender, System.EventArgs e)
            
    {
                
    // 在此处放置用户代码以初始化页面
            }

        }

    }
    就能看得出来.
    而Default.aspx文件,虽然没有阐明用的哪个类,但是,实际上已经继承自_Default类.
    <%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="MyTest._Default" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
        
    <HEAD>
            
    <title>Default</title>
            
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
            
    <meta name="CODE_LANGUAGE" Content="C#">
            
    <meta name="vs_defaultClientScript" content="JavaScript">
            
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        
    </HEAD>
        
    <body MS_POSITIONING="GridLayout">
            
    <form id="Form1" method="post" runat="server">
                
    <FONT face="宋体"></FONT>
            
    </form>
        
    </body>
    </HTML>
    以上代码第一句话最后Inherits="MyTest._Default"就表明了这点.这个文件我是以VS2003建立的,也就是 .Net1.1,MyTest是我用的命名空间。

    3、类的运行机制
    说了这么多,实际上我们还是没有说到System.Web.HttpContext类。但是我们现在说的东西对于System.Web.HttpContext类运用很有帮助。

    我们访问了Default.aspx,那么是只访问Default.aspx文件,或者该类么?答案当然不是。.Net中当子类被请求时,会先实例化父类。先建立父类的字段,然后是构造函数。

        public class _Default : System.Web.UI.Page
        
    {
            
    private void Page_Load(object sender, System.EventArgs e)
            
    {
                
    // 在此处放置用户代码以初始化页面
            }


            
    Web 窗体设计器生成的代码
        }
    从上面的类中可以看出,该类没有字段,也没有构造函数。实例化它又得先实例化System.Web.UI.Page类。System.Web.UI.Page类不是本文要讨论的。在实例化_Default类的时候首先执行的是OnInit方法。它重写了System.Web.UI.Page.OnInit。然后调用InitializeComponent方法,而InitializeComponent方法又调用了Load事件,执行了Page_Load方法。

    在Page_Load方法被执行之前,System.Web.UI.Page类的很多对象是不能使用的,比如:Application,Session等。

    4、System.Web.HttpContext类Current属性 的运用
    终于说到本文的重点了,可能这部分也不会说很多,但是上面说的确实是为这里服务的。

    也不多说了,太长的文章一般没人看,何况我写的比较肤浅,并且不够精彩。


    1、Application
    快吃饭了,晚上还有点事情,这里就不详细介绍了。如果需要用的朋友可以给我留言,我会解答的。

    Application可以这样使用:
    using System;
    using System.Web;

    namespace MyTest
    {
        
    /// <summary>
        
    /// MyTest 的摘要说明。
        
    /// </summary>

        public class MPage : System.Web.UI.Page
        
    {
            
    public MPage()
            
    {
                
    //
                
    // TODO: 在此处添加构造函数逻辑
                
    //
                try
                
    {
                    
    if(HttpContext.Current.Application.Count<1)
                        HttpContext.Current.Application.Add(
    "Title","我的网站");    //在Application没有被创建的时候执行
                }

                
    catch
                
    {
                    HttpContext.Current.Response.Redirect(
    "Err.Htm",true);    //出现错误,跳转到错误页面
                }

            }


            
    public string My_Title
            
    {
                
    get
                
    {
                    
    return Application["Title"].ToString();
                }

            }

        }

    }

    Default.aspx.cs继承
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;

    namespace MyTest
    {
        
    /// <summary>
        
    /// _Default 的摘要说明。
        
    /// </summary>

        public class _Default : MPage
        
    {
            
    private void Page_Load(object sender, System.EventArgs e)
            
    {
                
    // 在此处放置用户代码以初始化页面
            }


            
    Web 窗体设计器生成的代码
        }

    }

    Default.aspx 文件使用
    <%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="MyTest._Default" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
        
    <HEAD>
            
    <title><% = My_Title %></title>
            
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
            
    <meta name="CODE_LANGUAGE" Content="C#">
            
    <meta name="vs_defaultClientScript" content="JavaScript">
            
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        
    </HEAD>
        
    <body MS_POSITIONING="GridLayout">
            
    <form id="Form1" method="post" runat="server">
                
    <FONT face="宋体"></FONT>
            
    </form>
        
    </body>
    </HTML>

    全文完。

    作者:谢平,夕阳轨迹                     2006-5-19

    ______________________________________________
    在使用过程中发现System.Web.HttpContext.Current.Session对象的使用,不能在非pageCS中直接被调用,而必须间接使用。
                                                                      2006-5-25更正。
  • 相关阅读:
    mac os x 之通过远程主机在nginx上部署web静态页面
    基于jQuery UI的调色板插件推荐colorpicker
    Mac 访问隐藏文件方法! 网上方法在我电脑上都不可用!
    JavaScript设计模式学习之单例模式
    由一篇博文做出的代码,不用Math.round()如何实现其功能
    mac os x之解决npm安装包失败,或者nodejs工程缺少依赖
    用nginx的反向代理机制解决前端跨域问题
    mac之os x系统下搭建nodejs+express4.x+mongodb+gruntjs整套前端工程
    sourcetree window10 闪退
    滚动条自定义样式
  • 原文地址:https://www.cnblogs.com/birdshover/p/404593.html
Copyright © 2020-2023  润新知