首先我們說說二者的概念區別吧(相信大家都清楚)
1. asp控件是服務端控件,html是客戶端控件。
2. asp控件在服務端解析後,會轉化為html控件使得客戶端浏覽器能夠顯示出來。也就是說最終的產物都是html控件。
3. asp控件只有安裝.netFrameWork的服務器才能解析的來,而html用Java,php,asp都可以。
那麼下面說說二者的功能實現區別
1. asp控件是必須發生頁面提交的(除非強制取消,見2.),而html控件則可以提交也可以不提交(通過type屬性設置)
2. asp控件OnClick與OnClientClick區別:OnClientClick執行客戶端事件響應(由JavaScript控制);OnClick執行服務端事件響應。
二者的優先級:OnClientClick > OnClick 。
二者同時存在於asp控件時舉例:
復制代碼 代碼如下:
<asp:Button ID="btnDel" Width="80px" CssClass="buttonstyle" runat="server" Text="刪除" OnClientClick="return jsDel();" OnClick="btnDel_Click1" />
需要注意的是當我們當擊這個按鈕時,自動先執行的客戶端,再執行服務器端的.如果客戶端返回的是false,那麼服務器端對應的方法永遠不會執行.這樣就達到檢測,只有通過才去執行服務器端的方法.
也就是說如果我們上面寫成:
復制代碼 代碼如下:
<asp:Button ID="btnDel" Width="80px" CssClass="buttonstyle" runat="server" Text="刪除" OnClientClick="jsDel(); return false;" OnClick="btnDel_Click1" />
那麼不管jsDel執行的結要如何.服務器端對應的btnDel_Click1方法都永遠不會執行.因為return false使得始終使客戶端返回false
如果我們寫成:
復制代碼 代碼如下:
<asp:Button ID="btnDel" Width="80px" CssClass="buttonstyle" runat="server" Text="刪除" OnClientClick="jsDel();" OnClick="btnDel_Click1" />
那麼btnDel_Click1都有會發生.同樣也就達不到效果.也就是說你沒有通過檢測也去執行服務器的方法了.所以必須注意了.
3. asp控件的 OnClick 與html控件的 OnClick 意義不同:前者由服務端事件響應,後者由客戶端響應。
4. html控件加上runat="server"後,與asp控件基本無異(此時已轉化為服務端控件了),服務端就可以響應html控件。
5. html控件裡的屬性關鍵字都要是小寫的。所以大家要注意這些細節了,小小控件也會有大學問的,而且b/s開發較c/s開發本身就有復雜度,很多細節都是不太一樣的。
我們知道,服務器控件,在id會加上一系列的其他參數:
類似:
復制代碼 代碼如下:
<asp:CheckBoxList runat="server" ID="chkTrainConfirmType" RepeatDirection="horizontal" style="display:none">
</asp:CheckBoxList>
而在服務器端表現:
ctl00_ContentMain_chkTrainConfirmType
而我們要在客戶端操作這些控件,調用id有如下方法:
1.運行頁面查看源代碼 復制ID //不可取
2.document.getElementById("<%=buttn.ClientID%>") //只能在頁面上js代碼獲取 js文件裡邊獲取不了 //buttn和下面的txt1均為控件的id
3.在後台注冊方法 把所需要的ID全部當參數傳進去
Button1.Attributes["click"] = "Button_click(" + txt1.ClientID + "," + txt1.ClientID + "," + txt.ClientID + ");";