Web編程基礎(2)

來源:互聯網
上載者:User
在ASP.NET 2.0中, Button控制項有個新屬性PostbackUrl, 定義了應從web伺服器上請求的頁面.
在.NET 2.0中, Page類有一個新屬性PreviousPage, 返回一個page對象, 這個對象的控制項可以使用FindControl()方法來訪問, 返回一個Control對象.
伺服器控制項:......
驗證控制項:.....(記得設定Control To Validate 屬性).

狀態管理:
使用用戶端的狀態, 其缺點是在於增加了資料在網路之間的傳送. 使用伺服器端狀態的缺點在於, 伺服器必須給其用戶端分配資源.
用戶端的狀態管理:
ViewState
: 是一個隱藏欄位, 它會同頁面的內容一起發送給瀏覽器. 當把頁面發送給用戶端時, ViewState包含與表單中控制項相同的值. 給伺服器回送時, ViewState也會同控制項的新值一起發送給伺服器. 這樣它就可以驗證值是否改變, 並呼叫事件處理常式.
Web伺服器控制項自動使用ViewState來使事件工作.  
使用ViewState的缺點是, 資料總要從伺服器傳送給用戶端, 再從用戶端傳送給伺服器, 增加了網路流量. 為了減少網路流量, 可以關閉ViewState.
在Page指令中, 把EnableViewState屬性設定為False, 就可以關閉頁面中所有控制項的ViewState.
設定一個控制項的EnableViewState屬性, 也可以配置該控制項的ViewState.
還可以把定製的資料存放區在ViewState中.
ViewState只能儲存在一個頁面中. 如果狀態應儲存在多個不同的頁面中, 就應使用Cookie在用戶端儲存狀態.
Cookie:cookie在HTTP的頭中定義. 使用HttpResponse類可以把Cookie發送給用戶端.
Response是Page類的一個屬性, 它返回一個HttpResponse類型的對象.
把Cookie發送給用戶端:Code
        string myval = "myval";
        HttpCookie cookie = new HttpCookie("mycookie"); //執行個體化HttpCookie對象, 在這個類的建構函式中,設定Cookie的名稱"mycookie"
        cookie.Values.Add("mystate",myval); 
        cookie.Expires = DateTime.Now.AddMonths(3);//使用Expires屬性可以定義Cookie不再有效日期,這裡是3個月後
        Response.Cookies.Add(cookie);

如果只需要返回一個cookie的值, 就可以使用Value屬性. 如果要發送多個cookie的值,最好把值添加到一個Cookie中,而不是使用多個cookie.
從用戶端讀取Cookie:        HttpCookie cookie=Request.Cookies["mycookie"];
        string myval=cookie.Values["mystate"];

要在ASP.NET頁面中讀取cookie, 可以訪問HttpRequest對象中的cookie集合.
伺服器端的狀態管理:
Session:
工作階段狀態與瀏覽器會話相關. 客戶在伺服器上第一次開啟ASP.NET頁面時, 會話就開始了. 當客戶在20分鐘之內沒有訪問伺服器時, 會話結束.
可以在Global Application類中定義自己的代碼, 在會話開始或結束時運行.
建立 Global Application 類: WebSite|Add New Item|Global Application Class.  檔案中定義了一些事件處理常式.
工作階段狀態可以儲存在HttpSessionState對象中.
與當前HTTP環境相關的工作階段狀態對象可以使用Page類的Session屬性來訪問.
在Session_Start()事件處理常式中, 初始化會話變數:    void Session_Start(object sender, EventArgs e) 
    {
        // 在新會話啟動時啟動並執行代碼
        Session["mydate"]=0;
    }

通過Session屬性讀取工作階段狀態:Code
    protected void Button1_Click(object sender, EventArgs e)
    {
        int val = (int)Session["mydata"];
        Label1.Text = val.ToString();
        val += 4;
        Session["mydata"] = val;
    }

Application: 如果資料應在多個用戶端共用, 就可以使用應用程式狀態. 應用程式狀態的使用方式與工作階段狀態非常類似.
對於應用程式狀態, 應使用 HttpApplicationState類, 通過Page類的Application屬性可以訪問它.
例如: 在啟動Web應用程式時, 初始化應用程式變數usercount:    void Application_Start(object sender, EventArgs e) 
    {
        // 在應用程式啟動時啟動並執行代碼
        Application["usercount"]=0;
    }

讀取應用程式狀態中的資料:
        Label1.Text = Application["usercount"].ToString();
Cache:快取類似於應用程式狀態, 因為它在所有的用戶端上共用.
快取和應用程式狀態的區別是: 快取要靈活的多, 定義狀態何時失效有許多方式.
我們不是給每個請求讀取檔案或資料庫, 而是把資料存放區在快取中.
對於快取, 需要使用System.Web.Caching命名空間和Cache類.
利用Cache類的Add()方法可以把任意對象賦予快取.Cache.Add("mycache", myobj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10), CacheItemPriority.Normal, null);

第一個參數: 快取項的名稱
第二個參數: 應快取的對象
第三個參數: 依賴關係
第四個參數: 快取項失效的絕對時間
第五個參數: 快取項失效的相對時間
第六個參數: 快取的優先順序
第七個參數: 定義一個方法, 在刪除快取項時調用該方法.

先大致瞭解一下, 留點印象, 在用到的時候, 再學習.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.