版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/qq1010885678/article/details/37540315
1.資料綁定控件的DataSource屬性隻能接受三種接口類型的資料
(IListSource,IEnumerable,IDataSource)
2.要手動在已經綁定資料的資料綁定控件上添加自定義的資料:
this.DropDownList1.AppendDataBoundItems = true;
this.DropDownList1.Items.Add("請選擇");
如果沒有第一句代碼,在生命周期中的Render方法生成控件樹時,DropDownList添加資料的方式是覆寫的,會将之前的資料覆寫掉,設定為true之後,添加資料的方式變為追加方式,不會覆寫之前的資料(限制性Page_Load在執行Render)
3.Repeater其實是一個for循環,從對象資料源拿到實體對象清單之後,會對這個對象清單進行for循環,每一次循環都會執行xxxxTemplate标簽裡面的html代碼
好處:可以自己定義需要循環的内容,不必像之前伺服器自己生成的那麼繁雜
4.在為伺服器控件的屬性設定值的時候, 如果出現 string + <%#Eval("id")%> ,則一定要修改為:
<%# string + Eval("id")%>。
否則,伺服器控件的屬性,會把 <%當字元串轉義的。
5.Eval方法是單向綁定(負責顯示),Bind方法是雙向綁定 ~~(負責顯示,也負責修改資料)!
6.Repeater的ItemCommand事件:當Repeater控件裡面向伺服器送出表單時觸發,在前台可以标簽中使用CommandArgument(裡面放要傳的值)和CommandName(要執行的操作類型,如:Delete,Modify)屬性來設定,在背景的ItemRepeater事件中可以通過e.CommandArgument和e.CommandName接收到
7.Repeater大部分用來展示資料,要進行增删改查用 比較簡單
ListView裡面通過DataKeyNames設定列的主鍵
普通使用ListView:使用ObjectDataSource對象資料源控件配置資料源和方法,之後使用ListView資料綁定控件與ObjectDataSource控件綁定
使用異步ListView:需要一個ScriptManager和UpdatePanel的AJAX擴充控件,還是使用ObjectDataSource,ListView,使用方法同上(ScriptManager和ObjectDataSource在UpdatePanel外面,ListView在裡面)
ListView找資料源控件要資料,拿到資料之後交給DataPager決定要顯示哪些資料(DataPager負責生成頁碼條,并控制顯示在ListView裡面的資料行數)
ListView搭配DataPager控件實作的分頁是一次性從資料庫拿到所有的資料,然後再截取适當的部分顯示出來,在資料很大的時候是非常沒有效率的,應該在查詢資料的時候隻查詢需要顯示的那一部分的資料
使用ListView高效分頁
8.母版頁與子頁面的關系:先執行子頁面的PageLoad在執行母版頁的PageLoad
9.頁面生命周期中有用的方法(按順序):
LoadAllState:将表單隐藏域_VIEWSTATE裡的資料設定在頁面對象的ViewState屬性中
ProcessPostData:将表單裡送出的控件資料設定給控件樹中對應控件的屬性中
PageLoad:調用程式員在背景的PageLoad方法中編寫的代碼(此時已經能通路控件樹中的屬性了,通過這個在得到浏覽器控件裡面輸入的資料)
ProcessPostDataSecond:再次為控件樹裡面的控件設定浏覽器送出過來的值(主要是為了新增加的控件)
Rend:周遊控件樹,生成html代碼
10.Cache:
與Appplication原理差不多,都可以由伺服器的一個靜态字典集合實作。
與Session的差別:Session區分各種不同的浏覽器,隻有對應的浏覽器可以通路,Cache則是所有的人都可以通路
12.整頁緩存:會将動态頁面生成的html代碼存入伺服器緩存區,當浏覽器再次請求時,伺服器不會執行頁面的生命周期,而是直接從緩存區中拿到上次生成的html代碼發回給浏覽器
當使用整頁緩存時可以根據頁面url的不同參數來設定不同的頁面緩存版本。
如:<%@OutputCache Duration="20" VaryByParam="id"%>
Duration="20" 設定緩存的時間(以秒為機關)
VaryByParam="id" 設定根據頁面url的參數生成的緩存版本
13.資料源緩存:隻是将資料源控件所查詢到的資料放入緩存區,是一種局部緩存,當浏覽器在此請求時,伺服器還是會執行頁面的生命周期,隻是不在從資料庫中查詢所需要的資料,而是從緩存區中拿到該資料并交給相應的控件,然後生成html代碼發回給浏覽器
設定方法:在前台頁面的資料源控件代碼中,EnableCache="true"(啟用)CacheDuration="20"(20秒)
14.自定義的緩存:在背景代碼中,Cache["chubbby"] = "chubby";
15.緩存可以設定
絕對過期時間:10秒之後立即清空緩存
滑動過期時間:10秒之内有新的緩存請求的話,10秒重新計時
帶檔案依賴的緩存:隻要依賴的檔案沒有被修改,緩沖就不會被清空
16.Session預設是儲存在Framework内置的一個程式中(aspnet_wp.exe)缺點是容量小,易丢失
可以手動修改配置檔案将Session儲存到外置的程式,如:aspnet_state.exe(微軟提供) 也可以儲存在資料庫中(前提是要儲存的Session如果是對象的話必須序列化,在類名上添加特性[Serializeable])
在配置檔案中<sessionState mode=""></sessionState>
17.全局配置類,可以在其中配置網站運作時出現的任何錯誤的處理資訊(一般用來做錯誤日志)
在Application_Error方法中:
HttpApplication app = sender as HttpApplication;
Exception ex = app.Context.Server.GetLastError();
string logFile = app.Context.Server.MapPath("04Log.txt");
System.IO.AppendAllText(logFile,ex.Message);
或者一旦出現錯誤就跳轉到自定義的錯誤頁面
app.Context.Response.Redirect("05Err.aspx?err=" + app.Context.Server.UrlEncode(ex.Message));
也可以在全局配置檔案類中為請求管道事件注冊方法,如在浏覽器發送請求之前判斷所請求的圖檔是否為盜鍊的:
在Application_BeginRequest方法中編寫代碼
string strPath = app.Context.Request.UrlReferrer;
if(strPath.StartsWith("http://www.baidu.com"))
或者處理黑名單IP
app.Context.Request.UserHostAddress
18.根據錯誤的狀态碼跳轉到響應的自定義的錯誤頁面
在配置檔案中添加
<CustomError mode="on" defaultRedirect="1.aspx">
<error statusCode="404" redirect="2.aspx"/>頁面無法找到時
<error statusCode="500" redirect="3.aspx"/>伺服器内部異常錯誤時
</CustomError>
19.HttpModule過濾:
在實作IHttpModule接口的類中可以手動為請求管道的事件注冊方法
20.url重寫原理:
網站部署後被第一次通路,fw會讀取配置檔案裡面的<Modules>節點,周遊其中的子節點,擷取每個過濾器程式集的類建立并轉成IHttpModule接口存入一個靜态的過濾器集合中,在以後的浏覽器每次通路網站時,都會周遊過濾器集合同一調用Init方法向請求管道中注冊事件,RewritePath所做的事情就是修改了HttpContext裡面包含的請求封包中的請求url