从asp到asp.net之快速转型
网络整理 - 08-07
asp用了两年,三个月前开始转入asp.net,并完成了处女作就业中心网站( ju.edu.cn),从一种语言转到另一种,过程总是艰辛的,于是我想把我在转型过程中遇到
的一些曾经很是困惑的问题做成了FAQ的形式,希望能对想转入asp.net的同学有点帮助或
是启示,同时也算是理一理自己的思路吧^_^。
PS:我也是初学者,很多理解显然有点幼稚,并没有涉及到较深的层面,大家就凑合着瞧
瞧吧^_^
1.怎样建立asp.net运行环境?
asp有了IIS就可以了,而asp.net也很简单,只要在IIS基础上装一个.net Framework。那
么想要运行asp.net就会和运行asp同样简单,参照问题2。
底下是.net Framework1.1的下载地址,直接按照向导安装好就ok了!
568/dotnetfx.exe
2.asp直接放在虚拟目录下运行就可以了,那aspx呢?
答案很简单:完全一样:)
如果你有一个aspx的示例网站,那么直接把它拷贝到你建立的一个虚拟目录下就可以了。
唯一要注意的可能就是如果有webconig文件,一定要直接放到虚拟目录之下,否则会出错
。当然微软对于运行asp.net的解释可能会涉及到更深层面,包括私有,共有程序集,权限
之类,所以他会用“部署”这样一个庞大的词汇,我倒认为对于初学者来说实在有点小题
大作。
而咱们的目标不过是让它先运行起来再说:)
3.vs.net是怎样建立一个asp.net应用程序的?
我使用vs.net开发的,所以只针对这个开发环境:P。vs.net把aspx之类的“网页”集称之
为应用程序,多少有点让初学者迷惑(我一开始就是这样:P),这很容易让人觉得这与a
sp几乎完全不一样,其实不然(尽管实现思想上有很大差异),各个网页其实还是相互独
立的,和asp中一样,所以我宁愿还称之为“网页”。vs.net建立一个asp.net程序其实就
是帮你建立一个虚拟目录,然后在这个虚拟目录下建立项目文件(管理多个aspx)。这与D
reamwaver或Frontpage中建立一个站点的性质完全一样,建立这样的项目只是为了方便开
发环境来识别出当前项目包括哪些文件,实际运行时项目的概念其实是不存在的。
4.aspx中的代码究竟是怎样阻止的?与asp中有什么区别?
按照微软的定义,aspx中的代码在第一次运行是要经过编译的,这与asp中的程序解释执行
有着本质的区别。然而,从运行结果来看,这些区别可以说是完全透明的。理解aspx中的
代码的关键其实是要看的懂代码的结构。和asp结构相同的嵌入式代码我就不说了,那个在
理解了代码隐藏之后很容易明白。
你现在是否对类似这样的aspx开头感到不解?:P
<%@ Page CodeBehind="myDatum.aspx.cs" Language="c#" AutoEventWireup="false" In
herits="njuJob.myDatum" %>
这是用vs.net建立aspx的典型开头,我想从快速入门的角度看只要了解这几个属性:
@ Page就不用说了,就是一个标志来说明底下是对页面的属性描述
Language:使用的语言
CodeBehind:此页面对应的代码存储在哪个文件中
Inherits:页面从哪个类继承,此例子中表示是njuJob命名空间中的myDatum类
后两个属性是必须要理解的
代码隐藏是vs.net独有的功能(好像其它环境不支持),它允许把对应于一个页面的程序
逻辑和表示逻辑作为两个文件分离开来(这是不同于asp的一个明显区别),通常是这样的
结构:sample.aspx对应的代码文件是sample.aspx.cs(使用的c#语言),codebehind中会
自动指明。vs.net在编译时可以将所有的代码隐藏文件编译到一个dll中(所谓的程序集)
,当aspx页面被处理时,处理程序可以从Inherits中找到所继承的类,然后从dll中找到这
个类,并实例化从而执行程序得到输出的html。
可能现在大家对这样的解释没有一个整体的认识,所以请看下面的问题:
5.用asp的思路理解asp.net--代码文件中的代码怎样控制页面的显示?
考虑一个简单的例子,在asp中,如果你想要动态生成一个表格插入到页面中,那么做法通
常是在需要插入的地方加入一段程序和Response.Write语句来实现,稍微变一下,有人可
能会在插入的地方仅加一条语句<%=strTheTalbe%>,而strTheTable的值可能在这之前已经
计算好了,可能是通过一个函数实现的,但这种计算肯定还是包含在这个asp页面中。
现在考虑怎样在asp.net中实现这个过程,我们先引入最简单的一种控件,Literal控件(
关于控件大家应该有个大概的认识,就是一个通用的程序模块之类的意思),这个控件的
功能就是在页面中插入一段字符串,它具有一个text属性,你指定这个属性为一个字符串
,那么这个字符串就会在生成的html文件的相应位置。这应该很好理解,就跟asp中的<%=
strTheTalbe%>的功能几乎完全一样。这个Literal控件在aspx中的声明方式如下:
<asp:Literal id="ltlTable"></asp:Literal>
当要使用代码控制这个Literal时,就用下面的语句:
ltlTable.Text="<table><tr>……";
这样就实现了和asp中一样的功能。代码实际上是在隐藏文件中的,在隐藏文件的类中会有
一个声明来包含这样的控件,这种声明通常都是由vs.net自动完成的,即:你在页面中添
加一个控件,vs.net就会为你在代码隐藏文件中加入相应的声明。隐藏文件的结构分析可
以见下一个问题.
相信通过这样的例子大家应该能对asp.net用控件实现文本输出的功能有了一定的了解,其
实更多更复杂的控件的实现原理完全一样,只是它们提供了更多自动话的功能,例如一个
表格控件可以让你直接输出一个表格,而不用自己去写html代码,至于怎样精确的控制生
成的html代码就要靠自己去经验积累和技术提升了。
6.隐藏代码文件的结构是怎样的?
我们来实际分析一个文件:
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;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以上是说明引用了哪些程序集,这和asp中的包含文件应该类似,只有包含了某个文件才能
使用其中的函数,而这边只用引用了某个程序集,才能使用它提供的控件。
namespace njuJob //说明你的程序集的命名空间(这暂时不必理解)
{
public class myDatum : System.Web.UI.Page //这是asp.net页面对象模型(暂时不必
理解)
~~~~~~~~这个就是aspx头中的继承属性
{
System.Web.UI.WebControls.Literal ltlTable; //对aspx页面中的控件的声明
private void Page_Load(object sender, System.EventArgs e)
{
// 程序实际上是从这里开始执行
ltlTable.Text="……";
MyFunction();
}
private void MyFunction() //可以声明你自己的函数以供本页面使用
{
}
}
}
这个隐藏文件会被vs.net编译进dll,当aspx被处理时会执行。
好了,暂时先写这些东西吧,这几个问题都是我刚着手asp.net所感到困惑的,如果你恰好
也有同样的困惑,那我很高兴我写的东西能有所价值,如果有什么理解上的严重错误,还
请高手不吝赐教:)