程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET自定義控件從入門到精通3

ASP.NET自定義控件從入門到精通3

編輯:關於ASP.NET

3 狀態管理和Style類

3.1 狀態管理

在上一節中,我們成功的開發了一個具有設計器屬性的注冊控件。現在我們來學習對我們 的注冊控件進行狀態管理。

首先我們回顧一下ASP.NET的頁面的生命周期,如圖3.1.1所示:

圖3.1.1 ASP.NET 頁面的生命周期

這裡我們發現,任何頁面只要發生了回傳就一定會被服務器銷毀(除了像Ajax一樣的異步 回傳)。那麼就出現了一個問題,我們的自定義控件上所有的屬性都會被銷毀,而服務器端 將無法獲取自定義控件的值。

所有的Web頁面都是無法保持狀態的,我們需要使用ViewState來保持頁面的狀態。 ViewState是屬於當前頁面的,不會混淆。修改RegisterControl中的代碼,代碼如下所示:

namespace RegisterControl

{

[DefaultProperty("UserName")]

[ToolboxData("<{0}:RegisterControl runat='server' UserName='請輸入用戶名' />")]

public class RegisterControl : WebControl

{

[Browsable(true)]

[Description("讀寫屬性,獲取或設定用戶名密碼框中的值")]

[Category("雜項")]

public virtual string UserPwd

{

get { return this.ViewState["UserPwd"].ToString(); }

set { this.ViewState["UserPwd"] = value; }

}

[Browsable(true)]

[Description("讀寫屬性,獲取或設定用戶名文本框中的值")]

[DefaultValue("請輸入用戶名")]

[Category("雜項")]

public virtual string UserName

{

get { return this.ViewState["UserName"]; }

set { this.ViewState["UserName"] = value; }

}

protected override void Render(HtmlTextWriter writer)

{

writer.Write(string.Format(@" <table> <caption>用戶注冊 </caption> <tbody> <tr> <td>用戶名:</td> <td> <input name='txtUserName' type='text' id='txtUserName' value='{0}' onfocus='this.select()' /> </td> </tr> <tr> <td>密 &nbsp;&nbsp;碼:</td> <td> <input name='txtPassword' type='password' id='txtPassword' value='{1}' /> </td> </tr> <tr> <td>確認密碼:</td> <td> <input name='txtSecPassword' type='password' id='txtSecPassword' /> </td> </tr> <tr> <td colspan='2'> <input type='submit' name='btnRegister' value='注冊' id='btnRegister' /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type='reset' id='btnReset' value='重置' /> </td> </tr> </tbody> </table> ",this.UserName,this.UserPwd));

}

}

}

注意:在ViewState中存儲值,需要注意以下一些方面:

1.ViewState中存儲的對象必須可以被直接序列化。而且特別需要注意的是,ViewState可 針對特定類型轉換進行優化,基礎數據類型都會被優化。如果存儲自定義類型的對象,最好 重寫GetHash()、ToString()等方法,並且自定義類型轉換器。

2.存儲在ViewState中的信息必須簡短,減輕頁面壓力。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved