国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

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

我學(xué)習(xí)技術(shù)講究以實踐為主、理論為輔的方式學(xué)習(xí),以成果來激勵學(xué)習(xí)的積極性。這也是 我教書的一貫策略。所以在本系列所有的章節(jié)中,我都會以示例的方式來展示自定義控件開 發(fā)的細節(jié),請各位博友點評并指正。

閑話少提,轉(zhuǎn)入正題。本節(jié)中,我們要完成一個如圖1.1所示的用戶注冊控件的開發(fā):

 

圖1.1 設(shè)計器效果圖

這個注冊頁面的HTML代碼如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
     無標題頁
</title>
<style type="text/css">
table
{
border:solid 1px blue;
width:auto;
height:auto;
font-family:黑體;
font-size:9pt;
text-align:center;
}
div
{
text-align:center;
}
</style>
</head>
<body>
<form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTI1MTk2NDQzM2RkeKVXxlbRlC6kwkW0xZb24MJiHos=" />
</div>
<div>
<table>
<caption>用戶注冊</caption>
<tbody>
<tr>
<td>用戶名:</td>
<td>
<input name="txtUserName" type="text" id="txtUserName" />
</td>
</tr>
<tr>
<td>密  碼:</td>
<td>
<input name="txtPassword" type="password" id="txtPassword" />
</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" />
      
<input type="reset" id="btnReset" value="重置" />
</td>
</tr>
</tbody>
</table>
</div>

<div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQKhrtqbCQKl1bKzCQK1qbSRCwLcl5zHDgKGxZ2yDwScGUd5EoBIuuHJkqOSRr5qNbjG" />
</div></form>
</body>
</html>
.1 為Register自定義控件添加設(shè)計器屬性

在編寫自定義控件時,需要為頁面開發(fā)人員提供設(shè)計器屬性,便于他們設(shè)定控件的樣式、 外觀。并且在提供設(shè)計器屬性時,需要為這些設(shè)計器屬性提供便于閱讀的說明。使用設(shè)計器 屬性注釋自定義控件的屬性,可以提供該項功能。

2.11 提供屬性、層次屬性

當(dāng)頁面開發(fā)人員使用我們提供的Register控件時,希望可以設(shè)定用戶名文本框、密碼文本 框的樣式、注冊、重置按鈕的樣式。我們在開發(fā)Register控件時,需要提供如下的屬性要具 有以下特征:

屬性的鍵值對集合。

屬性包含屬性說明,并能顯示在Visual Studio中。

提供各種屬性的默認值。

屬性分組,便于開發(fā)人員進行屬性分組。

在RegisterControl類中添加以下代碼:

private string _userPwd;

[Browsable(true)]
[Description("讀寫屬性,獲取或設(shè)定用戶名密碼框中的值")]
[Category("雜項")]
public virtual string UserPwd
{
get { return _userPwd; }
set { _userPwd = value; }
}

private string _userName;

[Browsable(true)]
[Description("讀寫屬性,獲取或設(shè)定用戶名文本框中的值")]
[DefaultValue("請輸入用戶名")]
[Category("雜項")]
public virtual string UserName
{
get { return this._userName; }
set { this._userName = value; }
}

以上代碼實現(xiàn)了以下的功能(以UserName屬性為例):

在UserName屬性上修飾Browsable特性,即設(shè)定該屬性是否設(shè)計器可見。

在UserName屬性上修飾Description特性,即設(shè)定該屬性在設(shè)計器中的注釋文本。

在UserName屬性上修飾DefaultValue特性,及設(shè)定該屬性的默認值。

在UserName屬性上修飾Category特性,及設(shè)定該屬性的分組。
 狀態(tài)管理和Style類

3.1 狀態(tài)管理

在上一節(jié)中,我們成功的開發(fā)了一個具有設(shè)計器屬性的注冊控件?,F(xiàn)在我們來學(xué)習(xí)對我們 的注冊控件進行狀態(tài)管理。

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

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

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

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

namespace RegisterControl

{

[DefaultProperty("UserName")]

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

public class RegisterControl : WebControl

{

[Browsable(true)]

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

[Category("雜項")]

public virtual string UserPwd

{

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

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

}

[Browsable(true)]

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

[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>密   碼:</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' />        <input type='reset' id='btnReset' value='重置' /> </td> </tr> </tbody> </table> ",this.UserName,this.UserPwd));

}

}

}

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

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

2.存儲在ViewState中的信息必須簡短,減輕頁面壓力。
 
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
asp.net登錄代碼實例
利用js和ajax及時檢驗用戶注冊填寫信息是否正確
HTML_表單提交的細節(jié)(submit提交按鈕的使用細節(jié))
自定義控件
HTML以及CSS
php簡單的cookie登錄
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服