日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

第二天

系統 2385 0

POSTBACK的問題:
Page的IsPostBack屬性用來解決此問題.由于Page_Load在每次頁面加載時運行,其中的代碼即使在回送

(PostBack)的情況下也會執行.這在一般情況下不需要或者不允許的.

頁面處理步驟:
1 服務器往返:
服務器負責動態創建頁面并把頁面傳遞給客戶端.而客戶端負責給出信息和從用戶那里獲取信息,同時

有選擇的執行某個客戶端腳本.在asp.net中將信息在服務器客戶端之間傳遞是依靠http請求實現.
2 ViewState:
Web Forms的核心是無狀態的HTTP通信.這意味著服務器并不保留有關以前客戶請求的任何信息.這也

意味著每次在往返執行的過程中重新創建頁面時,服務器往往要做大量的額外工作,而web forms的做法是

使用ViewState. 頁面在服務器的兩次請求之間存貯自己的ViewState.ViewState包含了頁面上所有用戶

控件的狀態.通過使用System.Web.UI.StateBag 對象,此信息被存貯成名稱-值對.頁面中的viewstate被

存貯為隱藏的表單字段.
例如: <input type="hidden" name="_VIEWSTATE" value="......"/>
web forms讀取viewstate并將該頁面提交給服務器時恢復服務器控件的值.有點是頁面的狀態與頁面一

起存貯,而不是存貯在服務器中.缺點是在復雜的頁面中viewstate的內容可能會增大以致開始影響頁面下

載的速度.
注:默認情況下所有服務器控件都支持viewstate.當然也可以將頁面級的viewstate關閉--不保存頁面的

任何控件的狀態.實現:
<%@ Page EnableViewState="false" %>
基于逐步控制的思想,對某個控件要想實現viewstate,可以這樣:
<asp:DropDownList id="ship" EnableViewState="false" runat="server"/>
3 頁面處理步驟
a.配置階段
如果是進行回送操作,那么頁面和控件的viewstate隨后就會恢復.恢復之后系統就會激發Page_Load

事件.
b. 事件處理階段
c.顯示階段
d.清除階段
此階段首先發生的事件是Page_Unload,應該完成的工作有:關閉任何打開的數據庫連接,任何已打開

的文件以及刪除任何用于頁面的對象(大多情況下是對象引用).
4 web表單事件
和傳統事件驅動編程模型中所使用的事件不同,盡管仍然可以使用在客戶端中出現并被處理的事件(

就像服務器中出現并被處理的事件一樣),但主要的web form 事件模型適用于出現在客戶端但在服務器中

進行處理的事件.這種控制轉移是通過使用http post實現的.
事件出現:
有幾個服務器控件如:Repeater,DataList和DataGrid這樣的控件都可以包含其它自控件.這些子控

件并不會主動產生自己的事件以在頁面中進行處理.實際情形是,容器(即父控件)將事件打包,并將其作為

ItemCommand事件傳遞到頁面中.因此在Repeater中單擊某個按鈕時就會激發該事件.
例如:
<script language="c#" runat="server">
void "MyRepeater"_ItemCommand(Object Sender,RepeaterCommandEventArgs e)
{
ClickInfo.Text = "You selected the"+((Button)e.CommandSource).Text+"button<br>";

}

</script>
注:第一個參數sender是對產生事件的服務器控件的引用.也就是說,根據sender變量的值可以知道具體是

哪個控件.
第二個參數是一個包含了一組有關特定事件的信息的對象.例中CommandSource屬性表示對實際產生事

件的子服務器控件的引用.
客戶端和服務器上的事件處理:
基本上,服務器控件所支持的事件都在服務器上處理.而所有可由html input控件都需要在客戶端上處

理.但是當存在一個既能在服務器又能在客戶端處理的事件時,該事件會優先在服務器上執行.
頁面狀態:
除了隱藏的表單字段ViewState或者Session 對象中可以存貯信息,State Bag也是另一種選擇:
例如:
void Page_Load(Object Sender,EventArgs e)
{
int viewCount;
if(ViewState["viewCount"]!=null)
{
viewCount = (int) ViewState["viewCount"]+1;
}
else
viewCount = 1;

labelView1.Text = "Times page has been viewed"+viewCount.ToString();
ViewCount["viewCount"] = viewCount;
if(!IsPostBack)
{
ArrayList values = new ArrayList();
......
}
}
ViewState對象是一個由頁面維護的狀態集合.當然可以將自己的關鍵字添加到該集合中,而且該值將和

所有服務器控件的狀態一起在頁面中保留下去.
下面是有關頁面指令的內容:
1 @Page指令
主要屬性:
AspCompat 將頁面設置為在Single-thread Apartment(STA組件??) 中運行.(不懂!!)
AutoEventWireup 頁面事件是否自動激發.若為false,則象page_load這樣的事件必須由開發人員激活
Buffer 激活響應緩沖功能
ClassName 派生該頁面的類名稱
ClientTarget 頁面所指向的瀏覽器(有點不懂)
ContentType 設置響應的內容類型*
Debug 用激活的調試功能編譯頁面
Description 頁面的描述--asp.net將其忽略
EnableSessionState 頁面有權訪問Session對象,ReadOnly--頁面只能對Session對象執行讀操作,不

能改變Session變量
EnableViewState 為服務器控件保持的頁面級ViewState(前面已就此問題分析過)
EnableViewStateMac 驗證viewstate是否被客戶端竄改
ErrorPage 出現錯誤時重定向頁面
Inherits 該頁面繼承的代碼后置類
Language 這個就不說了,地球人都知道....
ResponseEncoding 由響應發送的文本的編碼格式
SmartNavigation 這個不太懂...
Src 該頁面所使用的代碼后置類的文件名稱
Trace 激活頁面執行的追蹤(默認false)
...
2 @Import 指令
用來導入一個名稱空間.
< %@Import namespace="value" %>
自動導入的空間:
system system.web
system.collection.specialized system.web.security
system.io system.web.ui
system.text.regularexpression system.web.ui.webcontrols
system.collections system.web.caching
system.configuration system.web.sessionstate
system.text system.web.ui.htmlcontrols
3 @Implements指令
用來在頁面中實現一個.NET接口.
注:要確保自定義控件能夠象標準服務器控件那樣對事件作出相應,我們的控件就必須實現

IPostBackEventHandler 接口!!*
< %@Implements Interface="System.Web.UI.IPostBackEventHandler"%>
4 @Register指令
兩種形式:
< %@Register tagprefix="tagprefix" Tagname="tagname" Src="pathname"%>
< %@Register tagprefix="tagprefix" Namespace="namespace" Assembly="assembly"%>
書看到這,產生一點疑問:第一種形式針對用戶控件,第二種針對自定義控件.那么用戶控件和自定義

控件到底有何區別???
5 @Assembly指令(不懂!)
用于直接引用一個裝配件.
6 @OutoutCache指令(P149)(也不懂)
用來對頁面在服務器上如何進行高速緩存進行控制.
7 @Reference 指令
識別當前頁面在運行時間應該動態編譯和鏈接的頁面或控件.這意味著在運行時允許將用戶控件(?)

動態添加到頁面中.(應該與page對象的LoadControl方法結合起來使用!)
代碼后置:
原來方法: 代碼內聯 (程序代碼與Html代碼混合在一個文件中)
原則是為代碼創建一個類,并從asp.net page對象中繼承該類.
規則: a名稱空間--System
System.Web.UI //用于創建一個繼承自Page對象的類
System.Web.UI.WebControls //用于引用控件
System.Data.SqlClient //用來訪問SQL Server
...
b要創建一個繼承自page的類.在此類中,保證Web控件的變量名與頁面中asp.net服務器控件的

名稱相同!!
在asp.net頁面中繼承代碼后置類文件:
< %@Page Inherits="class_name" Src="path_to_class_file" %>
注:要使用正確的文件擴展名!!
另一種形式:
< %@Page Inherits="ShipMethodClass" %>
此時,asp.net假設此類是預先編譯過的,而且位于應用程序的bin目錄中.

第二天


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 囊谦县| 洛川县| 北流市| 当阳市| 博湖县| 梅州市| 新龙县| 宁阳县| 龙山县| 天峨县| 绍兴县| 景宁| 垫江县| 阿拉尔市| 太仆寺旗| 藁城市| 年辖:市辖区| 夏邑县| 张家口市| 锦屏县| 潞西市| 嘉荫县| 忻城县| 葵青区| 罗田县| 沙雅县| 长沙市| 改则县| 廊坊市| 贺州市| 罗田县| 邓州市| 简阳市| 镇原县| 和平县| 庆元县| 彩票| 安多县| 旬邑县| 修文县| 湛江市|