DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> ASP.net中的AJAX:動態加載用戶控件(Calendar控件為例)
ASP.net中的AJAX:動態加載用戶控件(Calendar控件為例)
編輯:AJAX詳解     

這篇文章主要是一個動態加載用戶控件的實例,頁面效果是當用戶點擊按鈕時,出現日歷控件(用戶自定義控件,包括每個月的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日時日歷出現的“發工資”的提示,代碼如下:

  日歷提示功能代碼

 

代碼 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}

 

4.新建一個AJax窗口,命名為:DynamicLoadControl.ASPx,在頁面中放置一個Updatepanel1。

  5.在Updatepanel1中放入一個Button1,text=“…”(18行)。

  6. 在Updatepanel1中放入一個Html的hidden控件,將其改為服務器控件,id改為:Dynamic_UserControl_Hidden1(17行)。

  頁面布局介紹,下面我們來看一下DynamicLoadControl.ASPx的客戶端代

代碼 <head runat="server">
  <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>

 

 

 

下面是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 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}
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved