文章目錄
- 1
- 2
- 3
- 4
- 建立一個簡單的使用者控制項
- 使用者控制項前端代碼
- 事件代碼
- 頁面引用代碼
在Web系統開發中,經常會有一些功能模組在很多的地方重複出現,例如新聞管理系統中的使用者登陸/註冊、推薦新聞、熱點新聞和頁面上的一些固定欄目等。為了提高代碼的重用性,減少系統的開發與維護成本,一般會把這些重用性,減少系統開發和維護的成本,一般會把這些重用的功能模組寫成單獨的通用模組,以供需要的地方引用。
在ASPNET中,要實現這樣的通用模組,可以將這些功能模組封裝成“使用者控制項”,然後再需要的頁面中引用這些“使用者控制項”,從而達到了“一次封裝,N次複用”的效果。本文將介紹ASPNET使用者控制項的相關知識,並重點講解使用者控制項的封裝方法與編程技巧。
使用者控制項詳解
ASPNET WEB控制項檔案(.ascx)與ASPNET WEB分頁檔(.aspx)相似。與WEB分頁檔一張,使用者控制項由含有頁面標籤的使用者介面檔案(.ascx),頁面指令檔JS和後台代碼CS檔案組成。
使用者控制項可以包含所有web內容,比如靜態HTML內容和ASP.NET控制項。同時它還接受和Page對象一樣的事件(Load和PreRender)並通過屬性暴露一組相同的ASPNET固有的對象 Application、Session、Request、Response。因此可以採用和ASPNET web頁面相似的方式來建立使用者控制項,然後向其中添加所需的標記和子控制項。
通常,使用者控制項和頁面存在著以下的區別
1
使用者控制項的副檔名為ascx,而頁面為aspx。其中使用者控制項是從System.Web.UI.UserControl類繼承而來的,而Web頁面則是從System.Web.UI.Page類繼承而來的。
儘管如此,他們卻有著許多相同相似的地方,System.Web.UI.UserControl 和 System.Web.UI.Page都是繼承自同一個 System.Web.UI.TemplateControl類。因此,System.Web.UI.TemplateControl類的屬性和方法,事件都是共有的.
2
使用者控制項沒有Page指令,而換成了@Control指令,該指令對配置以及其他屬性進行定義,後面將詳細闡述@Control指令
3
使用者控制項不能作為獨立檔案運行,你必須像處理其他任何控制項一樣,將它們添加到ASPNET WEB頁面運行
4
使用者控制項沒有<html> <head> <body> <form>。因此除了這些元素以外,可以在使用者控制項裡使用和頁面裡一樣的任何內容。
@Control指令
@Control指令類似於@Page指令,但@Control指令時在建立ASP.NET使用者控制項時使用的。@Control指令允許定義使用者控制項要繼承的屬性,這些屬性值會在解析和編譯頁面的時候賦予使用者控制項。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="ASPNETTeach4.WebUserControl1" %>
@Control指令可用屬性比@Page指令少,他的常用屬性有
AutoEnentWireup |
指示控制項的事件是否自動匹配。如果事件自動匹配則設定為true |
ClassName |
用於指定需要在請求時進行動態編譯的控制項的類名。並且可以包括一個類的完整限定名。 |
CodeBehind |
指定與該使用者控制項關聯的後置代碼檔案路徑 |
EnableTheming |
是否使用主題。 |
EnableViewState |
是否啟用狀態視圖 |
Inherits |
後置代碼對應的處理的類名 |
Language |
該使用者控制項使用的語言 |
建立簡單的使用者控制項
上面闡述了使用者控制項的概念和@Control指令,下面我們來看看如何建立一個使用者控制項以及如何在Web頁內使用使用者控制項。
建立一個簡單的使用者控制項
建立成功之後會出現三個檔案
你會發現和我們建立Web表單一樣。這裡就不在贅述。
我們來看後置代碼
除了繼承的基類變了以外基本和Web頁面一致。
我們在這個使用者控制項裡加一些內容。
使用者控制項前端代碼
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="ASPNETTeach4.WebUserControl1" %>
<table style="width: 100%;">
<tr>
<td>
<asp:Calendar ID="Calendar1" runat="server"
BackColor="#FFFFCC"
BorderColor="#0000cc"
BorderStyle="Ridge"
OnSelectionChanged="Calendar1_SelectionChanged"
CellPadding="0"></asp:Calendar> </td>
</tr>
<tr>
<td>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></td>
</tr>
</table>
事件代碼
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
Label1.Text = "你選擇的日期是:" + Calendar1.SelectedDate.ToLongDateString();
}
頁面引用代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="ASPNETTeach4.WebForm1" %>
<%@ Register Src="~/WebUserControl1.ascx" TagPrefix="uc1" TagName="WebUserControl1" %>
<!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 runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc1:WebUserControl1 runat="server" id="WebUserControl1" />
</div>
</form>
</body>
</html>