ASP.NET从1.1到2.0的变更要点

ASP.NET提供了两种组织代码的方式,不管是ASP.NET1.X还是ASP.NET2.0都是通用的
(1)内置代码分离
这是最基本的一种方式,感觉是为了和传统的ASP兼容才提出的。这种方式同样用于介绍ASP.NET知识点,例如建立一个WebCodeSeparated.ASPx页面,可能的代码如下
WebCodeSeparated.ASPx
</HTML>
<head>
<script ruant="server">
</script>
</head>
<body>
</body>
</HTML>

(2)页面布局和逻辑代码分离的文件,
   VS2003就采用的这种思想,例如上面的WebCodeSeparated.ASPx可能为
WebCodeSeparated.ASPx和
WebCodeSeparated.ASPx.cs
为了关联两者关系,可以使用Codebehind和Inherits进行说明 
   在VS2005里,提供了parital关键字

现在把一个Label控件、一个TextBox控件和一个Button控件托放到WebCodeSeparated.ASPx上,最后生成的Source类似如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebCodeSeparated.ASPx.cs" Inherits="WebCodeSeparated" %>

WebCodeSeparated.ASPx

<!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:Label ID="Label1" runat="server" Text="Label"></ASP:Label><br />
        <ASP:TextBox ID="TextBox1" runat="server"></ASP:TextBox>
        <br />
        <ASP:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></div>
    </form>
</body>
</HTML>

 WebCodeSeparated.ASPx.cs

public partial class WebCodeSeparated : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = "hello" + TextBox1.Text + "Welcome to ASP.NET2.0";
    }
}



那么这段代码有什么特点呢?
和ASP.NET1.1相比,这段代码有什么区别呢?
首先,Page指令由由CodeBehind="WebCodeSeparated.ASPx.cs"改成了CodeFile="WebCodeSeparated.ASPx.cs",为什么会有这样的改变呢?
  这是因为,用CodeBehind的文件是在运行前编译的,而在运行时,其中的逻辑源代码文件可以不再使用。这给页面的的布局带来了非常的不便,请看下面示例子:

<%@ Page Language="C#" AutoEventWireup="true" %>
 <script lauguage="c#" runat="server" >
Button1_Click()
{ Label1.Text = "hello" + TextBox1.Text + "Welcome to ASP.NET2.0";}
</script>
<body>
    <form id="form1" runat="server">
    <div>
        <ASP:Label ID="Label1" runat="server" Text="Label"></ASP:Label><br />
        <ASP:TextBox ID="TextBox1" runat="server"></ASP:TextBox>
        <br />
        <ASP:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></div>
    </form>
</body>
</HTML>

 

  这是单一的*.ASPx文件,显示的结果将和上面的一样。但是现在我想更改问候,例如改成如下代码,相当于中文版

<%@ Page Language="C#" AutoEventWireup="true" %>
  <script lauguage="c#" runat="server" >
Button1_Click()
{ Label1.Text = "你好" + TextBox1.Text + "欢迎进入ASP.NET2.0";}
</script>
<body>
    <form id="form1" runat="server">
    <div>
        <ASP:Label ID="Label1" runat="server" Text="Label"></ASP:Label><br />
        <ASP:TextBox ID="TextBox1" runat="server"></ASP:TextBox>
        <br />
        <ASP:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></div>
    </form>
</body>
</HTML>
那么当使用ASP.NET1.1版本在运行时,完全没有问题,显示中文版的问候。

然而,在ASP.NET1.1里,一般都是页面布局和代码分离的,上面代码在用Visual Studio.NET2003开发时,更多的写成如下的形式
<%@ Page Language="C#" AutoEventWireup="false"  CodeBehind="*.ASPx.cs"%>
  <body>
    <form id="form1" runat="server">
    <div>
        <ASP:Label ID="Label1" runat="server" Text="Label"></ASP:Label><br />
        <ASP:TextBox ID="TextBox1" runat="server"></ASP:TextBox>
        <br />
        <ASP:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></div>
    </form>
</body>
</HTML> 

后台代码文件*.ASPx.cs为
Button1_Click()
{ Label1.Text = "hello" + TextBox1.Text + "Welcome to ASP.NET2.0";}

在开发时,由于当我们运行时(使用快捷键F5),系统自动将*.ASPx.cs编译为dll文件并放置在bin文件夹,然后供*.ASPx使用,这样以后如果我们需要将该页面部署到远程主机,例如您申请了一个 www.aspxcool.com域名和虚拟主机,你的Internet Server Provider(网络服务供应商)可能给你一个ftp帐户让你把页面文件上传到某个给定的文件夹下(例如wwww目录下),此时你上传时,只要上传*.ASPx和bin文件夹及其下面的dll文件就可以了,*.ASPx.cs源代码完全不需要(当然上传页可以),所以你现在应该感觉到了,如果我需要改变输出的问候为中文,该怎么办呢?
直接更改*.ASPx.cs里的代码为
Button1_Click()
{ Label1.Text = "你好" + TextBox1.Text + "欢迎进入ASP.NET2.0";}
可以吗?
当然不可以,事实上该源代码文件你可能都没有上传,你从何处更改,即使上传你更改了也不其作用。没有办法,您只好重新用VS.NET2003打开*.ASPx,并修改*.ASPx.cs的Button1_Click为中文版,然后再用VS.NET2003进行编译,最后把编译好的BIN下面的DLL文件再拷贝到服务商提供的wwww/bin文件夹下,覆盖原有的文件,如此一系列动作可以说是牵一发而动全身,

 特别是你部署类似blogs、Community Server这样的大的项目时,更是为了一点的改动而重新编译整个项目,非常的麻烦。

   现在ASP.NET2.0提供了CodeFile来改变这种情况,它可以使得*.ASPx.cs也是在运行时动态编译。所以在上面的例子里,如果您使用页面布局和逻辑代码分离的形式,在你更改过WebCodeSeparated.ASPx.cs里的源代码为中文版后,页面会在运行时进行显示。

在上面代码里使用了partial,那么时候了该关键字有什么好处呢
在ASP.NET1.1版本里,您应该知道,如果我们在WebForm1上放置了一个控件,例如ID为Button1的按钮则
*.ASPx会做如下记录
<ASP:Button  id="Button1" runat="server">

而*.ASPx.cs会做如下记录
protected Button Button1 ;  //定义了一个Button类对象Button1

   由于这种关系,使得系统的维护变的非常困难,特别是在稍微复杂的应用程序中,改动一点有时需要重新编译整个项目。而且更为难办的是,如果你在程序里按照如下使用
*.ASPx
protected Button Button1 ;  //定义了一个Button类对象Button1
而忘记在*.ASPx定义Button1,系统还会提示
          “未将对象引用设置为实例”的错误   
为了解决这些问题,.NET2.0才提出了partial 关键字,它使得如下的使用是正确的
你在*.ASPx里定义了一个按钮如
<ASP:Button  id="Button2" runat="server">
这样您在*.ASPx.cs里就可以直接使用Button2,不用再定义类似 Button Button2;这样的对象,系统通过paritial自动将Button2关联起来。所以提高了维护性

(3)AutoEventWireup的属性由"false"改为了false,也就是说VWD2005主要支持隐式的事件代理处理
private void InitializeComponent()
  {   
   this.SubmitBtn.Click += new System.Web.UI.ImageClickEventHandler(this.SubmitBtn_Click);
   this.Load += new System.EventHandler(this.Page_Load);this.Load += new System.EventHandler(this.Page_Load);
  }
现在VS更支持隐式的
也就是前面介绍的OnClick的方式。

1166230.html

陈源 2008-01-14 00:19 发表评论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值