這篇文章主要是一個動態加載用戶控件的實例,頁面效果是當用戶點擊按鈕時,出現日歷控件(用戶自定義控件,包括每個月的1日出現“發工資”的提示),對日歷進行操作時,不影響整個頁面(無刷新),當用戶再次點擊按鈕時,用戶控件卸載。以前我的一個日歷的實例中也實現了這個效果,但是那時使用的是整體用戶控件加載,並且不卸載功能,當用戶點擊按鈕時,出現的日歷出現和消失都是采用Visible方法,這無疑加重了頁面的負擔,今天學習到了這種方法,記錄下來,供日後回顧。
首先我們先來布置頁面:
1.在網站下添加新項用戶控件,默認其頁面名:WebUserControl.ascx
2.在WebUserControl.ascx中添加一個日歷控件,按照自己喜歡的樣式改變其外觀。
這裡我想說明兩個Calendar控件的屬性,讓我們一起來重溫Calendar控件,首先Calendar控件默認可以選擇日期,可以使用SelectionMode屬性修改這個選擇操作,這個屬性的值可以是Day(允許在日歷中單擊某個日期)、DayWeek(允許在日歷中單擊某個日期,同時可以單擊星期旁邊的箭頭,選擇整個星期)、DayWeekMonth(可以選擇日期或星期,日歷右上角的箭頭允許選擇整個月)、none(用戶不能做任何操作)。接著:day屬性的一個有用的功能是,可以把Day屬性的IsSelectable設置為false,關閉選擇某個日期或日期范圍的選項。這個功能在實際開發中,可能會用到,代碼如下:
if(e.Day.Date<DateTime.Now)
e.Day.IsSelectable=false;
3.編寫每個月1日時日歷出現的“發工資”的提示,代碼如下:
日歷提示功能代碼
4.新建一個AJax窗口,命名為:DynamicLoadControl.ASPx,在頁面中放置一個Updatepanel1。 5.在Updatepanel1中放入一個Button1,text=“…”(18行)。 6. 在Updatepanel1中放入一個Html的hidden控件,將其改為服務器控件,id改為:Dynamic_UserControl_Hidden1(17行)。 頁面布局介紹,下面我們來看一下DynamicLoadControl.ASPx的客戶端代 下面是cs代碼, 動態加載用戶控件代碼
代碼
1using System;
2using System.Collections;
3using System.Configuration;
4using System.Data;
5using System.Linq;
6using System.Web;
7using System.Web.Security;
8using System.Web.UI;
9using System.Web.UI.HtmlControls;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12using System.XML.Linq;
13
14public partial class WebUserControl : System.Web.UI.UserControl
15{
16 protected void Page_Load(object sender, EventArgs e)
17 {
18
19 }
20 //DayRender:日歷中顯示的每一天都會運行該方法。
21 protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
22 {
23 //單元格的垂直對齊方式為top
24 e.Cell.VerticalAlign = VerticalAlign.Top;
25 if (e.Day.DayNumberText == "1")
26 {
27 e.Cell.Controls.Add(new LiteralControl ("<p>發工資</p>"));
28 e.Cell.BorderColor = System.Drawing.Color.Black;
29 e.Cell.BorderWidth = 1;
30 e.Cell.BorderStyle = BorderStyle.Double;
31 e.Cell.BackColor = System.Drawing.Color.LightGray;
32 }
33 }
34}
<title>無標題頁</title>
<script type="text/Javascript">
function pageLoad() {
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<ASP:ScriptManager ID="ScriptManager1" runat="server">
</ASP:ScriptManager>
<ASP:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<input ID="Dynamic_UserControl_Hidden1" type="hidden" runat="server" />
<ASP:Button ID="Button1" runat="server" Text="…" onclick="Button1_Click" />
</ContentTemplate>
<Triggers>
<ASP:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</ASP:UpdatePanel>
</div>
</form>
</body>
</Html>
2using System.Collections;
3using System.Configuration;
4using System.Data;
5using System.Linq;
6using System.Web;
7using System.Web.Security;
8using System.Web.UI;
9using System.Web.UI.HtmlControls;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12using System.XML.Linq;
13
14public partial class DynamicLoadControl : System.Web.UI.Page
15{
16 protected void Page_Load(object sender, EventArgs e)
17 {
18
19 }
20 //這個方法先於page_load之前執行,也在控件初始化前執行
21 protected void Page_Init(object sender, EventArgs e)
22 {
23 //從送來的參數中,判斷用戶控件是否已經加載,"Dynamic_UserControl_Hidden1"是個標志,
24 //為true時,代表用戶控件存在,初次加載頁面時,表示是false,故沒有用戶控件出現在網頁上
25 if (Request.Params["Dynamic_UserControl_Hidden1"] == " true")
26 LoadDynamicUserControl();
27
28 }
29 //點擊按鈕出現用戶自定義控件
30 protected void Button1_Click(object sender, EventArgs e)
31 {
32 //當用戶自定義控件(標志為true)存在時,就移除到自定義控件,同時標志改為false。
33 if (Request.Params["Dynamic_UserControl_Hidden1"] == "true")
34 {
35 UpdatePanel1.ContentTemplateContainer.Controls.Remove(UpdatePanel1.ContentTemplateContainer.FindControl("WebUserControl1"));
36 HtmlInputHidden hidden = (HtmlInputHidden)UpdatePanel1.ContentTemplateContainer.FindControl("Dynamic_UserControl_Hidden1");
37 hidden.Value = "false";
38
39 }
40 //否則就加載用戶自定義控件
41 else
42 LoadDynamicUserControl();
43 }
44 //加載用戶自定義控件
45 private void LoadDynamicUserControl()
46 {
47 //當Updatepanel中沒有用戶控件時
48 if (UpdatePanel1.ContentTemplateContainer.FindControl("WebUserControl1") == null)
49 {
50 //根據指定的WebUserControl.ascx路徑加載控件WebUserControl1
51 Control c = LoadControl("WebUserControl.ascx");
52 c.ID = "WebUserControl1";
53 //找到標志將其值改為true
54 HtmlInputHidden hidden =(HtmlInputHidden ) UpdatePanel1.ContentTemplateContainer.FindControl("Dynamic_UserControl_Hidden1");
55 hidden.Value = "true";
56 //在Updatepanel中加入用戶控件
57 UpdatePanel1.ContentTemplateContainer.Controls.Add(c);
58 }
59 }
60
61}