我注意到這里有一個ASP的tag,他的作用是標(biāo)示一個控件嗎?
是的,他的前綴,ASP的前綴。表明這是一個ASP的控件,后面的部分表示這是一個服務(wù)器端的控件,是在.NET框架下定義的。我么也可以形成我們自己的控件并且給他們一個獨立的前綴,實際上我們已經(jīng)為我們的站點定義了一些我們內(nèi)部使用的控件。好,現(xiàn)在,我們看一下這個程序的運行結(jié)果,這個運行結(jié)果與上面的結(jié)果相似,所不同的是數(shù)據(jù)庫訪問依賴的是SQL provider,另外,增加了一個小小的定義背景色的屬性。我們這個程序與上面的程序的設(shè)計基本相同,但是卻很容易添加這樣的屬性,我們每天都用這樣的方式處理成噸的表格、添加許多種其他的屬性。實際上,這也是使用服務(wù)器端控件的好處,他能使我們更容易在HTML中表現(xiàn)方法和屬性,他使得編程工作更容易,更快捷。
因此,我們看見這段代碼與前一段代碼的主要區(qū)別是他不需要讓程序員編寫遍歷整個records set的WHILE循環(huán)。也不需要在HTML中的某個合適的位置顯示結(jié)果。你可以很簡單的生成一個表,然后告訴他:你的值來源于records set。
對的,是這樣的。剛才有一件事情我跳過去了,就是你說的那件事情。我們回過頭來在看一下那段代碼。我們用名字調(diào)用這些data grid并且將他們捆綁到來源于data set的結(jié)果以及 data set.中的一個特定的表格,接下來的工作就可以使用這些數(shù)據(jù)了。
dgCustomers.DataBind()
上面的例子是一個將一個很簡單的表格顯示在屏幕上的程序,這種表現(xiàn)方式看起來是簡單有效的,但是,對于一個比較復(fù)雜的表格,還要進行很多次的復(fù)雜運算以及顯示更為花哨的字符串等要求的程序仍然可以用同樣的方式遍歷整個records set嗎?
當(dāng)然可以,這實際上是.NET服務(wù)器端控件的一大特點。我們很容易對datagrid做一些客戶化的定制工作,因為,他是一個很基本的原始表格。也可以對datalist做一些客戶化的工作,使他的每一行或者每一個單元對應(yīng)一條記錄。我們可以通過循環(huán)的方式用模版定制他的每一個重復(fù)的地方,有一種repeater數(shù)據(jù)控件,允許完全用模版定制他的每一步,因此,我們有一個頭模版和一個一個尾模版分別定義了模版的起始和模版的終止。我們還有一些item 模版和一些 alternating item 模版,他們可以為我們提供更多個性化的設(shè)計。我們還有很多的好東西放到了網(wǎng)站ASPNextGen.com上面,在那里我們用data repeater作了許多的工作,同時也提供了更多的客戶化的輸出。
太好了,太好了,我可以像現(xiàn)出那些激動人心的功能,剛才你提到了你可以開發(fā)你自己的控件放到頁面上去,如果現(xiàn)在的table grid控件不能夠滿足你的需求,你可以寫一些自己的代碼并將改造過的控件應(yīng)用到任何你想要用到的地方。
是的,不過最有意思的是,你不僅僅可以定制你自己編寫的控件,而且還可以擴展服務(wù)器端組件的功能例如我可以擴展data grid功能,以滿足我自己的特殊的需求。做這些事情,我們可以使用我們完全編譯的服務(wù)器端控件,也可以使用一種另外一種控件---用戶控件(user control)。用戶控件是一種中間件,他介于頁面控件和服務(wù)器控件之間,你可以通過用戶控件顯示方法和屬性,也可以表現(xiàn)更多的功能。
開發(fā)這些額外的用戶控件要比單純寫一個ASP的程序復(fù)雜,但是可以獲得更加強大的功能,是這樣的嗎?
你提了一個好問題。開發(fā)用戶控件的復(fù)雜性會令你非常吃驚的。如果你創(chuàng)建一個ASPC類型的文件,并且寫一些HTML在文件里面,你就已經(jīng)擁有了一個最簡單的用戶控件。如果你想讓一個頁面內(nèi)容包含在每一個頁面里面,你可以將這個頁面定義為一個HEADER,像使用INCLUDE文件那樣使用它。你可以很容易在你的用戶控件中包含HTML的結(jié)果。因此,最簡單的用戶控件程序就是HTML程序。此外,如果我想用同樣的方式在這些頁面中加入一些代碼,我可以在用戶控件中提供一些功能并且暴露一些屬性。例如,我想在每個頁面上設(shè)置我的用戶控件背景色,我可以在我的用戶控件中暴露背景色屬性,
但是,從另外一個角度來看,這將會是一件相當(dāng)復(fù)雜的工作。例如,你要做一個服務(wù)器的控件,一個 data grid 控件不會很容易地。因為它涉及到NET框架中的一些東西。有一種創(chuàng)建此控件的方法,必須發(fā)生在提交方法之前,發(fā)生在子控件被提交頁面之前。因此,如果你要做數(shù)據(jù)綁定或者設(shè)置背景色等工作,你就應(yīng)該在合適的時間內(nèi)完成,否則當(dāng)該頁面被提交時,你將得不到你想要的東西。如果從這些方面來看,做這種控件將會是是一件復(fù)雜的事情。我曾經(jīng)做過一個控件,一個ad rotator控件。它相當(dāng)于.NET服務(wù)器控件的一個子控件。它可以綁定到一個XML文件上,該文件完成的是當(dāng)頁面被訪問時在你的的站點上顯示不同的廣告。在他的存儲表單里面,有一個圖像的URL指向圖像文件,一個導(dǎo)航URL,當(dāng)你點擊廣告時,該URL將你帶到與該廣告相關(guān)的那個頁面。這個頁面是不固定的,因為它淶源于不同的廠商。該頁面可以是圖像,也可以是文字。
到目前為止他還沒有提供給我們找到那個BANNER顯示了多少次的方法。因此,我在這個控件中加入了這個屬性,就像是放入了一個倒計時器。因此你可以在XML文件中放入一個默認(rèn)值,設(shè)置該默認(rèn)值為一個人100或者另一個人200等。你的默認(rèn)值會逐漸遞減直到為零。此時圖像將不再顯示了。我想建立這種控件還是會花費的一定的時間的。
無論你是一個經(jīng)驗豐富的ASP開發(fā)人員還是一個經(jīng)驗不豐富的ASP開發(fā)人員,你都可以非常容易地做一個很基本的用戶控件。但是,如果沒有今天的技術(shù),你可能要花很大的精力,可能要深入更底層去做許多工作,并且這一切還取決于你的經(jīng)驗豐富程度,以及系統(tǒng)提供的相應(yīng)函數(shù)的豐富程度。
這有點像用匯編寫一個HELLO WORLD的程序,那會是一個很復(fù)雜的過程。但是用C語言寫這個程序則很容易。這并不意味著用C語言寫所有程序都非常容易。但是,看起來好像這種方式擴大了開發(fā)人員的開發(fā)能力。因此,如果一個開發(fā)人員想開發(fā)一些運行在他們WEB服務(wù)器上的復(fù)雜的應(yīng)用程序,他們要在ASP.NET上做很多的工作。
你認(rèn)為ASP.NET未來將提供什么樣的功能?給予ASP.NET的WEB SERVICE 將會被人們設(shè)計成什么樣子的?
那些都是無止境的。不過信用卡的認(rèn)證將會是一個巨大的功能需求。輸入卡號、名字和地址,然后讓W(xué)EB SERVICE返回每一部分的布爾值YES或者NO,接下來要么認(rèn)證成功進行交易要么由于認(rèn)證失敗而退出。當(dāng)然也可以返回名字拼寫錯誤、認(rèn)證完成的消息或者一個郵政編碼是否有效等結(jié)果。
在這個功能上就這么多的東西,我們還有一些 WEB SERVICE的例子在我們的站點上,他們都是很基本的應(yīng)用程序,你可以調(diào)用他們,他們都是我們放到網(wǎng)站上的一些教程程序,他們可以給你足夠的你想要的信息。關(guān)于ASP.NET和WEB SERVICE,我認(rèn)為會有一個巨大的市場和他們相伴而行。你應(yīng)該知道一個叫Amazon.com的公司,他們做了許多將服務(wù)連接起來的工作。人們可以在他們自己的網(wǎng)站上銷售書,但是書的信息卻通過Amazon.com表現(xiàn)出來,那些銷售書的人得到了信譽。這可以看成是WEB SERVICE的一個典型的例子。這個例子很好的表現(xiàn)了當(dāng)你瀏覽一個書的列表時候,如何讓這些書顯示出來?無論是神秘小說還是StephenKing的小說,都可以通過WEB SERVICE返回結(jié)果。
Amazon.com實際上并不是你要訪問的站點,但是你卻可以從哪里得到圖像、得到標(biāo)題、得到書的列表信息。你可以用你喜歡的方式顯示他們。
是的,WEB SERVICE的優(yōu)點是他是基于xml的,因此你可以用這種方式得到信息,并且用你喜歡的方式處理信息。只要能夠分析并處理xml信息,你就可以使用web SERVICE,因此你沒有必要一定要跑到一個.net的web站點上去使用web SERVICE。
-------------
=---=================================================
什么是做.NET程序最重要的事情?如果你給我們觀眾一些指點,他們將會更快地接受ASP.NET。
好的。句法這樣的東西,你已經(jīng)用了很多次了。你只需要學(xué)習(xí)它們之間的不同就可以了。如果你遇到完全不同的處理方式,你就不必按照過去的方式去做了,因為你做腳本工作已經(jīng)很長時間了,所以會有很多不同的東西需要學(xué)習(xí)。其次,關(guān)于assembly,namespace這些概念都要弄清楚。接下來,是語言的問題。我曾經(jīng)是一個VB程序員,現(xiàn)在我是一個C#程序員,我喜歡C#,它是一種很,好的語言。如果有20行的VB程序C#5行就可以解決問題。但是對于COM,.NET框架的已經(jīng)為你處理了那些常見的工作,所以你只需要編寫一些業(yè)務(wù)邏輯的代碼就可以了。
你說的是理解“什么是Assembly?“
是的,Assembly,namespaces、相關(guān)背景、整個.NET架構(gòu),都要理解。
理解namespaces和Assembly的關(guān)鍵是理解他們的概念。你理解它們越多,你對架構(gòu)的理解就越深入。主要理解它們是什么和你為什么需要它們。我認(rèn)為一些ASP開發(fā)者,或是其他一些沒有任何開發(fā)背景的人進入ASP領(lǐng)域的原因是因為ASP非常好理解,它很容易接受并且你可按照自己的方法去做。如果要變換到.NET框架還是需要一些努力。如果你有開發(fā)背景就比較容易理解,因為你熟悉相關(guān)概念,熟悉數(shù)據(jù)格式,并且你知道過程調(diào)用這些東西,對于新涉入的人來說就需要做更多的工作。那些經(jīng)常做腳本開發(fā)的工作人員需要做更多的努力。
ASP編程模型在整個WEB頁面上使用的都是腳本語言,無論是客戶端腳本還是服務(wù)器端腳本都使得程序顯得非常凌亂。你經(jīng)常要更改的一些代碼或者不得不四處修改一番,F(xiàn)在,ASP.NET好像已經(jīng)為你提供了更加規(guī)范的開發(fā)方式。
你現(xiàn)在能完全分離出你的代碼。你可以有HTML代碼和程序代碼,能處理數(shù)據(jù)和得到動人效果。
你提到你是個C#程序員,ASP.NET在頁面上支持C#。我們看到SQL Server的那個例子,你使用的是VB,不是VB script,你是不是在頁面上也能用c#開發(fā)。
正確。或者是EIFFEL、VB、COBOL其他任何一種.NET支持的語言。你可以利用這些語言做你想做的任何事情,但是最最重要的,你不再被什么條框限制。比如做ASP程序,你只能選擇VB script或者javascript這些東西,F(xiàn)在則不同了,你熟悉什么語言?你更喜歡用什么語言開發(fā)?你就可以使用什么語言開發(fā).net的程序。如果你喜歡COBOL,你會感覺到在.NET框架下做程序更順手、更有意思。我想這種革新對很多使用其他語言的人都開啟了方便之門。我曾經(jīng)和很多C++項目開發(fā)者工作過,我不想說他們恐懼ASP,但是他們確實不喜歡使用VBScript這些東西,現(xiàn)在好了,他們不必再為此煩惱,他們可以使用他們最喜歡的語言開發(fā)。
是的。在我們即將結(jié)束我們的談話時,你還有什么話要對我們的聽眾說嗎?能對他們深入學(xué)習(xí)并使用ASP.NET有些益處。
熱愛它,學(xué)習(xí)它,盡情使用它,我想這是關(guān)鍵問題。ASP.NET確實是偉大的工具。它使網(wǎng)站的開發(fā)更為容易。并且我想,正如上面提到的,它變得更有意思,更順利、更容易。所以我想說,如果你打算學(xué)習(xí)ASP.Net,現(xiàn)在就開始,你會精通它并且感到充滿快樂。