關於控制項部分的看法–讀Programming ASP.NET中文版

來源:互聯網
上載者:User

讀書一般先看目錄,並且習慣性的從第三章開始看,除了胡百敬老師的書和代碼大全外,其他見過的中文技術書籍無論是自己撰寫的還是翻譯的都清一色的在前兩章添加N多基礎知識,不管講的好不好,第一次看一本書從第三章開始看都成了習慣。

同其他講解asp.net的書一樣,第三章是從控制項開始講起的,但是讀罷此章,作者描述問題的思路和譯者的翻譯確實讓我迷惑了很多,繼續看完後面的章節,感覺作者剛下筆實在是太緊張,而且太想把asp.net介紹給一個從來沒有接觸過web開發的朋友了。

我們從另一個角度還看asp.net中的幾種控制項:asp.net server control, html server control, html control。

asp.net server control是最基礎的asp.net組件,本書也使用了6章來介紹了常用的控制項、2.0的新控制項和控制項開發的知識。而html的兩種control和asp.net server control之間的關係如何理解呢?最簡單的就是站在一個最高的角度來看——看它們最終在呈現到用戶端瀏覽器的時候是什麼。我們用下面這個很簡單情境來看一下:

假設我們要使用者輸入使用者名稱,點擊提交按鈕後伺服器根據使用者名稱從伺服器獲得使用者的年齡然後顯示在頁面上。我們拖放上一個Textbox和一個Button,再放置並配置好一個驗證控制項就ok了。當我們使用驗證控制項的時候,asp.net會將起使用span標記和一堆控制樣式的屬性將*呈現到頁面上,而運行機制是用指令碼控制的,這些指令碼會自動根據使用者的瀏覽器將適合該瀏覽器的代碼一起發送到用戶端上。

這時候我們運行這個頁面,看其source code,很容易看出asp.net server button control就是一個type為submit的html input control。這時候我們再放置一個html control的button控制項,然後將其屬性加上runat="server",再運行,然後看原始碼,就可以看到他被render成一個type為button的html input control了。這時候點擊兩個控制項中的任何一個都會造成頁面提交(如果驗證控制項驗證通過的話),作為submit的asp.net server control很容易理解為什麼被會引發提交,那麼html server control呢?是因為它調用的指令碼裡有__doPostBack('Button2',''),而頁面裡的__doPostBack()函數使得頁面提交了。而加入了驗證控制項後,兩者再提交前都是需要做資料檢查的,使用的都是指令碼來驗證是否可以提交頁面資料,但是方式是截然不同的:

<input  type="submit" name="Button1" value="Button"  onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;Button1&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="Button1" />

<input language="javascript" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(''); __doPostBack('Button2','')" name="Button2" type="button" id="Button2" value="button" />

<span id="RequiredFieldValidator1" style="color:Red;visibility:hidden;">Please enter your username</span>

這時我們可以看到嵌入資源檔的指令碼這樣被使用了,但是如果想知道這些方法具體做了些什麼可以藉助fiddler、httpwatch或firebug這樣的工具來看,不過最快捷的辦法是在瀏覽器的地址欄敲入javascript:js_method_name來查看。比如javascript:WebForm_DoPostBackWithOptions就能看到該方法的內容了。

好,我們剛才從結果上入手,算是比較深入的看到了結果和用戶端頁面執行的過程,這時我們不妨再跳出來,重新審視一下這個過程:我們需要的是使用者輸入其username,然後我們根據該值從資料庫裡取出對應的年齡並顯示在頁面上,那麼整個過程應該是使用者資料姓名提交,伺服器得到使用者名稱,然後將年齡得到,返回給用戶端。拋開http的資訊來回傳遞的資訊應該只有username和age,但是看看我們現在,是否傳送了太多無用的資料?

那我們簡化一下流程:我們全部使用html control來做,分別放置一個type為button和text的input控制項,當button被點擊時執行一個javascript function檢驗text裡是否有字元然後將其發送到伺服器,比如通過調用伺服器段的一個web service,這個web服務在驗證資料後將資料從database中取出,返回到用戶端,在接受到資料後指令碼將其呈現在頁面上。

需要注意的是資料在用戶端的驗證是不可信的,通常情況下大多數瀏覽器通過地址欄就可以任意修改頁面元素的值,所以在伺服器做判斷是必須要的。

這時候我們看兩個過程簡直是天壤之別,但是在開發效率和後期維護上也是天壤之別的。asp.net server control如果用不好,造成的後果就是災難了。

看完此章的朋友們再看完了這篇拋的“磚”,然後將一個<asp:Button..../>中的runat="server"去掉,看看是什麼結果?思考一下html被瀏覽器的解釋是否能更清晰的認識到Control這個詞呢?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.