lASP.Net服務端控件是ASP.Net對HTML的封裝,在C#代碼中就能夠用txt1.Text=‘abc’這種方式來修改input的值,ASP.Net會將服務端控件轉成HTML代碼輸出給瀏覽器。服務端控件是ASP.Net很是吸引初學者、很是容易上手的東西,也是最被人詬病的東西。物盡其用,服務端控件在內網系統、互聯網系統的後臺部分等訪問頻率不高的地方用的仍是很適合的。(互聯網公司,產品型公司(OA))
l在服務端控件的標籤中寫的屬性若是不是控件內置的屬性就會被原樣的輸出到客戶端
l全部的ASP.Net大部分都是從Control、WebControl類繼承的,幾乎都有的成員有:
•(1)ClientID,控件在客戶端的Id,控件在服務端的Id不必定等於客戶端HTML中的Id,好比說在ListView等控件的模板中。所以若是要在客戶端經過JavaScript Dom、JQuery的getElementById、$(「#id」)來操做控件的話最好不要直接寫服務端Id,而是$(‘#<%=txt1.ClientID%>’)。用JQuery事件設置鼠標移到控件上和從控件移開的不一樣樣式。在用戶控件中就能夠看到ClientID和id的不一樣。UserControl、母版、ListView。推薦永遠用ClientID
•(2)Visible 屬性, 控件是否可見,若是Visible=False是不會轉到HTML中的,這和在HTML中給元素style.display='none'效果是不同的。
•(3)CssClass 屬性,控件的樣式名,就是HTML中控件的class屬性。也能夠單獨修改BackColor、BorderStyle等屬性,可是不建議這麼作,由於會生成不少的內聯樣式,生成html尺寸大,不便於統一的修改。
•(4)Attributes,用來設置獲取控件的額外屬性。和Dom中的setAttribute()、getAttribute()是同樣的。Button1.Attributes[「a1」] = 「2.jpg」; HTML 事件在服務端看來也是屬性 Button1.Attributes[「onmouseover」] = 「alert(‘hello’)」;
l說明:全部的服務端控件不只可使用控件定義的屬性,還可使用額外的屬性,這些屬性包括控件沒有封裝的HTML屬性(好比onmouseover等瀏覽器端事件頁看成屬性),ASP.Net會將它不識別的屬性原封不動的渲染到客戶端。在代碼中也能夠經過Attributes屬性設置額外屬性:CheckBox1.Attributes["onmouseover"] = "alert('hello')";
l一、Label控件。Text屬性爲顯示文本。AssociatedControlID屬性用來關聯一個控件,若是爲空的話會展現爲一個<Span>,若是指定爲一個控件的id,則會展現爲一個HTML中的<Label>而且將for屬性設置爲被關聯控件的ClientId。
l二、Literal控件也是展現一段文本,可是Literal控件不會渲染任何額外的標籤,就是將Text屬性的值展現出來而已。
l三、TextBox控件,文本框控件。TextMode屬性取值SingleLine、MultiLine、Password,分別渲染爲input(type=text)、textarea和input(type=password)。當AutoPostBack屬性爲true的時候,用戶焦點離開TextBox就會形成頁面Post,實現原理就是講ASP.Net原理時的AutoPostBack。TextChanged事件(須要AutoPostBack=true纔會修改後觸發,不然是頁面提交才觸發),文本發生變化的時候事件觸發。(以Post方式提交表單)ASP.Net中要提交表單的時候最好調用__doPostBack方法。
l四、RadioButton控件,對應爲input(type=radio),經過GroupName屬性進行分組
l五、Button控件。OnClientClick屬性,當用戶點擊按鈕的時候在瀏覽器端執行的代碼,注意OnClientClick是字符串屬性,寫的代碼是JavaScript代碼,運行在瀏覽器端。<asp:Button ID="btnDel" runat="server" onclientclick="return confirm('真的要刪除嗎?')" Text="刪除" />
l六、LinkButton,用法和Button差很少,區別就是Button控件渲染爲按鈕,而LinkButton渲染爲超連接。不要用LinkButton來實現普通的超連接,由於LinkButton的href爲一段javascript代碼,進行的是表單的Post,沒法「在新窗口中打開鏈接」。和講「行刪除」那個例子中href爲javascript的超連接原理同樣。通常用Button就行,只有用戶要求「長成超連接好」採用LinkButton,就是一個在瀏覽器中渲染成超連接,服務端當成按鈕用的東西。
lHyperLink:IsPostBack=False,沒有提交表單內容,沒有OnClick事件。
l七、ImageButton控件也和Button差很少,只不過是顯示爲圖片,渲染爲input(type=image)
l八、Button、LinkButton、ImageButton等控件都有CommandName、CommandArgument兩個屬性和Command事件,可讓多個按鈕控件共享一個Command事件處理函數,經過讀取事件對象e的CommandName、CommandArgument兩個屬性讀取被點擊按鈕上設置的這兩個參數來執行不一樣的操做。例子:編輯、刪除多行數據。這種用法在ListView等控件中用的最多。
l九、Panel控件用來盛放一些控件。若是設定GroupingText屬性那麼就渲染爲含有<fieldset>的div標籤,也就是GroupBox效果,不然渲染爲<div>
l十、HyperLink控件,超連接。和LinkButton不同(常考),不會向服務器端Post,就是一個超連接。NavigateURL:連接地址;Text:顯示文本。若是設定ImageUrl屬性則會顯示圖片超連接。
l十一、FileUpload控件,文件上傳控件。渲染成input(type=file)。屬性:FileContent以流形式得到上傳的文件;FileName 上傳文件名;HasFile Bool值,表示用戶是否選擇文件,SaveAs方法用於將文件保存到磁盤的指定位置。漏洞:文件上傳漏洞(上傳一個下載源代碼的aspx、Process.Start啓動格式化,建立管理員、開啓遠程桌面)。解決方法:只容許上傳指定類型文件,上傳文件夾不給執行權限。
lHTML控件,ASP.Net把HTML控件當成普通字符串渲染到瀏覽器端,不去檢查正確性、沒法在服務器端進行處理。
lASP.Net服務端控件,通過ASP.Net高度封裝的控件,使用簡單,運行在服務器端,能夠在服務端使用C#代碼進行操做,會渲染到客戶端爲HTML控件。
lrunat=server的HTML控件。在HTML控件的基礎上添加runat="server",也是運行在服務器端的,也能夠服務端使用C#代碼進行操做,也會渲染到客戶端,不像ASP.Net服務端控件那樣高度封裝,暴露的屬性大部分是普通HTML屬性。和ASP.Net服務端控件相比的好處是:當須要在服務器端要對控件進行操做的時候,若是控件沒有被ASP.Net服務端控件封裝的時候,用runat=server的HTML控件很方便,runat=server的HTML控件也會對虛擬路徑(~/)、id→ClientID進行處理,因此在使用虛擬路徑、UserControl中也可能會用到onmouseover="document.getElementById('<%=TextBox1.ClientID%>').value='哈哈';"
l直接在屬性中有問題,會把<%直接輸出到瀏覽器端,所以不要在控件的屬性值中寫<%%>。
lrun=server的html控件的好處,中庸!
l一、不像ASP.Net服務端控件那麼重量級、封裝的那麼多,程序員能夠比較好的控制生成內容的質量。更容易讓美工來使用,由於美工不認得<asp:TextBox
l二、相對於html控件:
1)可以在服務端代碼中操做控件javascript
2)可以自動處理虛擬路徑~html
3)能夠處理ClientID。java
l選擇的順序:HTML→run=server的HTML→ASP.Net服務端控件
la→HtmlAnchor;form→HtmlForm;head→HtmlHead;input→HtmlInputButton、HtmlInputCheckBox 、HtmlInputText 等;meta→HtmlMeta;table→HtmlTable;tr→HtmlTableRow;td→HtmlTableCell;title→HtmlTitle。未單獨封裝的標籤(好比div)或者自定義的標籤(好比mmm)對應類型爲HtmlGenericControl。使用Attributes屬性操做未封裝的屬性。
l不用單獨記憶,忘了的話,在aspx中弄一個標籤試驗一下就行。
l服務端HTML控件不像ASP.Net控件那樣封裝的高級,好比ASP.Net控件的BgColor屬性爲Color類型,而HTML控件的BgColor屬性則爲字符串類型,須要開發人員設置合法的值
l數據綁定分爲
數據源和
數據綁定控件兩部分,數據綁定控件經過數據源來得到數據,經過數據源來隔離數據提供者和數據使用者,數據綁定控件經過數據源來對數據進行修改,數據源有SqlDataSource、AccessDataSource、ObjectDataSource、LinqDataSource、EntityDataSource、XmlDataSource等(SiteMapDataSource是SiteMap專用數據源),因爲大部分項目都不會頁面直連數據庫(由於違反最基本的分層原則),因此SqlDataSource、AccessDataSource不會使用,LinqDataSource、EntityDataSource也是隻有在很極端的採用Linq、EF的項目中才會用,XmlDataSource是處理XML數據是纔可能會用。ObjectDataSource是Web開發中應用最廣的數據源,也能很容易的進行數據庫切換。
數據綁定控件有列表數據綁定控件(DropDownList、RadioButtonList、ListBox、CheckBoxList、BulletedList等)和複雜控件(DataGrid、GridView、DetailsView、FormView、ListView、Repeater、DataList等,GridView等都是ListView子集)。複雜控件中DataGrid已經不推薦使用,Repeater是最輕量級的組件,在互聯網的前臺用的最多,ListView是GridView、DetailsView、FormView、Repeater、DataList等這些控件的大一統者,那些控件的優勢ListView全都有,會了ListView那些控件也就會用了,所以數據綁定控件主要講列表數據綁定控件、Repeater和ListView,項目中會用到FormView 、GridView
lObjectDataSource用來將一個類作爲數據源,TypeName屬性爲數據源類的全名,有DeleteMethod(刪除方法)、InsertMethod(新增方法)、SelectMethod(查詢方法)、UpdateMethod(修改方法)等幾個屬性,分別爲類中刪除、插入、查詢、更新數據的方法名,這些方法可能有參數,參數的值是經過DeleteParameters、UpdateParameters、InsertParameters等嵌套節點設置的。
lObjectDataSource訪問本身寫的普通類,在類上標註[DataObject] DataObjectMethod
l手工編寫ObjectDataSource太麻煩,使用可視化界面來完成。將ObjectDataSource拖放到界面上,在右上角的智能標誌上選擇「配置數據源」便可進行配置。數據源類通常TypeNameAdapter類,選中類,選擇【下一步】,分別選擇對應的得到、刪除、更新、插入數據的方法。
lDropDownList顯示來自於ObjectDataSource的數據,選擇數據源(DataSourceID屬性)爲剛纔的ObjectDataSource,而且設定顯示字段(DataTextField)和值字段(DataValueField)便可。RadioButtonList、ListBox、CheckBoxList、BulletedList等也都是這麼用。
l手工設定綁定,除了能夠給控件的DataSourceID屬性設置一個數據源的方式進行數據綁定(推薦),還能夠在代碼中經過代碼設置綁定(舊版本的ASP.Net只能這樣綁定,新版本中不推薦)。
•用代碼綁定能夠將任何實現了IEnumerable接口的對象綁定到數據綁定控件。ListBox2.DataSource = new object[]{3,5,6};ListBox2.DataBind();
•因爲數據綁定控件默認會將數據保存在ViewState中,所以不會每次刷新頁面都會從新加載數據,只有第一次須要加載(!IsPostBack)
•因爲代碼綁定在禁用ViewState的狀況下有不少麻煩事,所以推薦用DataSourceID的方式,控件會本身來判斷是否應該從新取得數據。
lDropDownList原有「請選擇性別」和數據綁定項的共存:AppendDataBoundItems=「true」,把數據綁定的項加到後面。