ASP.NET页面提前处理问题

转载 2006年05月27日 17:05:00
 

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中直接被调用,而必须间接使用。

http://birdshover.cnblogs.com/archive/2006/05/19/404593.html

关于过滤器中的页面跳转和输出流关闭

一般过滤器假如有页面跳转,一般都采用服务器端跳转,因为如果使用客户端跳转很容易照成递归重定向问题 package org.senssic.dwr; import java.io.IOExcept...
  • Senssic
  • Senssic
  • 2014年03月13日 00:21
  • 1015

ASP.NET刷新页面的六种方法

第一:  private void Button1_Click( object sender, System.EventArgs e )    {       Response.Redirect...
  • txx9010
  • txx9010
  • 2013年08月08日 10:11
  • 1926

asp.net从零开始---002--前端页面布局

前端就是给人看的界面,后台人员不仅要知道后台代码的编写,更要知道前端的布局。有时候要比前端人员知道的还要多,因为有可能前端人员是个21天精通ps的大师级人物。这时候你可以自己写前端。1.CSS CSS...
  • lw_zhaoritian
  • lw_zhaoritian
  • 2016年08月03日 12:49
  • 3290

asp.net-页面跳转的方法及实例

实例如下: .aspx代码如下: 页面转向 通过静态的超链接转向: 我要自学网 ...
  • yayun0516
  • yayun0516
  • 2014年12月01日 11:22
  • 2168

ASP.NET 嵌套页面的几种方式

1、#include Tisp => aspx页面,无法嵌套aspx,因为一个页面只能有一个“page”指令。 Code: 2、iframe(自适应屏幕高度,高度100%显示(无需js) ...
  • qq285679784
  • qq285679784
  • 2016年10月19日 18:04
  • 2862

asp.net页面间传值的五种方法

一、QueryString传值:简单、安全性低 二、Server.Transfer传值:(Page1)Context.handler 三、Cookie传值:客户端 四、Session传值:单用户 五、...
  • jcx5083761
  • jcx5083761
  • 2013年07月16日 02:28
  • 1531

asp.net怎样一键生成静态页面,实例说明

由浅到深,通过实例来说明怎样使页面一键静态化,然后从效益出发,轻讨如何在实际应用中更灵活运用此功能。。...
  • jintougao
  • jintougao
  • 2014年04月23日 17:22
  • 4531

ASP.NET 所有的页面指令介绍

当使用指令时,虽然标准的做法是将指令包括在文件的开头,但是它们可以位于 .aspx 或 .ascx 文件中的任何位置。每个指令都可以包含一个或多个特定于该指令的属性(与值成对出现)。 注意   ...
  • u011966339
  • u011966339
  • 2016年11月17日 11:27
  • 785

asp.net子页面刷新父页面以及页面自动刷新的方法

1) 10表示间隔10秒刷新一次 2) window.location.reload(true); 如果是你要刷新某一个iframe就把window给换成frame的名字或ID号 3...
  • yangmingxing980
  • yangmingxing980
  • 2014年04月01日 09:33
  • 1672

Asp.net页面生存周期

# 事件或方法 功能 描述    1 Init 事件 页面初始化 初始化设置。    2 LoadViewState 方法 加载视图状态 填充ViewState属性。    3 LoadPost...
  • smartsmile2012
  • smartsmile2012
  • 2016年06月06日 18:51
  • 911
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET页面提前处理问题
举报原因:
原因补充:

(最多只允许输入30个字)