用了兩年asp,三個月前開始轉入asp.net,從一種語言轉到另一種,過程總是艱辛的,於是我想把我在轉型過程中遇到
的一些曾經很是困惑的問題做成了FAQ的形式,希望能對想轉入asp.net的同學有點協助或
是啟示,同時也算是理一理自己的思路吧^_^。
PS:我也是初學者,很多理解顯然有點幼稚,並沒有涉及到較深的層面,大家就湊合著瞧
瞧吧^_^
1.怎樣建立asp.net運行環境?
asp有了IIS就可以了,而asp.net也很簡單,只要在IIS基礎上裝一個.net Framework。那
麼想要運行asp.net就會和運行asp同樣簡單,參照問題2。
底下是.net Framework1.1的,直接按照嚮導安裝好就ok了!
http://download.microsoft.com/download/7/b/9/7b90644d-1af0-42b9-b76d-a2770319a
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所感到困惑的,如果你恰好
也有同樣的困惑,那我很高興我寫的東西能有所價值,如果有什麼理解上的嚴重錯誤,還
請高手不吝賜教:)