今天學習總結了一些相關概念和知識。
之前無論是做 單機的winform 還是 CS的winform 感覺,不到兩年下來感覺還可以,雖然API有很多,但是還是比較熟悉基於WINDOWS消息機制的編程,但是現在網絡硬件設施更新之快,BS 開發優勢之大,不過需要的技術方面倒是得擴寬許多,JavaScript,CSS,Html都需要了解掌握,除webForm之外,對於現今主流的MVC更是需要學習。
概念:
asp.net控件服務端控件 --> 響應服務端事件
HTML控件客戶端控件 -- > 響應客戶端事件
HTML客戶端事件是不會提交給服務端的,比說點擊按鈕,改變文字顏色等,只是針用戶機器本身,是不會發送數據包給遠程服務器的
而 asp.net按鈕點擊之后,將會以post或者get形式發送給服務器,進行數據庫操作等等,頁面提交之后將會刷新。
但是ajax技術使客戶端控件發送請求給webservice
現象獲取用戶輸入到文本框中的內容:
服務器端控件:string s=Textbox1.text;
html控件:string s=request.querystring["text1"]; //text1為參數
另:
<input type="text" name="name" ><input type="button" value="確定">
定義一個變量通過request.getParameter("name")取得,其中name 是標簽名稱
另外在javascript中可以
先在標簽里加上一個id 如<input type="text" name="name" id="name">
再通過document.getElementById("name").value 取得標簽中的值
===========================================================
獲取文本框中的內容有以下兩種方法:
假設為如下文本框:
<input type="text" value="" id="text">
1、原生JS獲取文本框的值:
document.getElementById("text").value //text為文本框的id
2、jquery獲取文本框的值:
$("#text").val()
============================================================
Web服務器端控件和Html控件 關系
HTML 頁面的擴展名是 .htm 或 .html。假如瀏覽器從服務器請求某張 HTML 頁面,服務器不進行任何修改,就會把該頁面發往瀏覽器。
ASP.NET 頁面的擴展名是 .aspx。如果瀏覽器請求某張 ASP.NET 頁面,那么在把結果發回瀏覽器之前,服務器首先會處理頁面中的可執行代碼。
最終瀏覽器還是會由html輸出,服務器控件的頁面訪問速度比html的要慢的多。asp.net以頁面一遍遍刷新html的形式,這就決定了他的機制很慢。而且越是追求對程序員友好、功能強大,那么其性能問題越是嚴重。
一句話:服務器控件是封裝好了html控件。 服務器控件通過ViewState維持狀態,而HTML沒有,如果沒有交互的,可以直接用HTML控件。
服務器端控件都會有個runat="Server"屬性,
這樣才能夠在后台對其進行設置修改,
也就是在cs代碼里面能對其修改設置。
可測試 放個HTML控件 在CS代碼是引用不出控件名的
然后HTML控件加上runat="Server" 在CS代碼就能引用該控件了
本質上ASP.NET 的服務器控件 解析后返回到前台還是HTML控件
建個頁面 放一個asp:textbox上去
然后運行頁面,然后查看頁面源文件
會發現放上的服務器控件變成了HTML的inupt type="button"
<asp:Button width="7%" ID="btnupdate" runat="server" Text="Update" CssClass="trcss_tot1" OnClick="btnupdate_Click" />
順便說一下VIEWSTATE:
由於HTTP連接屬於無狀態的,每次頁面請求都無法記錄上次請求頁面的信息。
那么要保存上次請求頁面上控件的值,也就是頁面刷新后,填寫的值不變,比方在textbox填了個‘a’,頁面刷新后還是'a',.NET框架為實現這種機制,於是就用到了viewstate視圖狀態來保存這些控件的值,
那么將所有控件的值存在什么地方呢?可以運行程序,然后在頁面中查看源文件,就可以看到一個input type="hidden" name="__VIEWSTATE"的標簽,這個就是所謂的”視圖“,它是經過服務器序列化過的,然后服務器接收后會反序列化這些隱藏域的值然后又從 新給這些控件賦值,從而頁面刷新后還能記錄上次請求時候的所有控件的值。服務器控件都會默認保存VIEWSTATE的 有個屬性(EnableViewState)可以設置的, 設置為Flase就不保存了,頁面刷新后,值也就沒了,可以做個測試放個textbox設置EnableViewState為false,然后輸入個 值,然后再用按鈕去刷新頁面,那么textbox會為空,因為沒有視圖狀態記錄到上次輸入的值。
服務器端控件&html控件的使用問題
先說下:服務器端控件僅僅是微軟為了方便一些入門開發者封裝了一些html控件,所以說服務器端控件的根源來源於html控件,只不過在這控件基礎上加入了一些封裝的css\js以及開放一些供別人設置的接口而已。
所以說html控件趨勢被取消掉那是絕對不可能的。取消了。就沒有了Web存在的意義。要說取消趨勢也是服務器端控件。
服務器端控件的發展趨勢,從這幾年來看,排斥的人越來越多,為什么?
1.設置樣式非常不方便,(不是說不能設置樣式),而是不直接。
2.多數普通人員是不懂得怎么針對服務器端控件進行優化----如是否取消ViewState,是否需要這個控件進行postback,總之經常會看到這些人員做的網頁源代碼比普通html控件開發人員要多至少一輩的垃圾代碼。不僅性能不好提升,也驗證影響SEO優化。
3.編寫對應的一些javascript不方便。每次都要獲取真正的服務器端ID,如果要將javascript寫在js文件中,那是一種惡浩,你得變通采用非ID的方式或其他方式進行聲明。繁瑣
4.從微軟目前的技術趨勢來看,逐漸拋棄服務器端控件開發也是一種主流。當然選什么還是要看你的項目來決定,有的開發公司天生就為了速度,拖拉服務器控件進行快速開發也是沒啥好說壞與好。
推薦本相關參考與優秀博客:http://blog.csdn.net/lxfzgg/article/details/8467232