博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.net中的AJAX:动态加载用户控件(Calendar控件为例)
阅读量:5173 次
发布时间:2019-06-13

本文共 5137 字,大约阅读时间需要 17 分钟。

这篇博客主要是一个动态加载用户控件的实例,页面效果是当用户点击按钮时,出现日历控件(用户自定义控件,包括每个月的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日时日历出现的“发工资”的提示,代码如下:

  日历提示功能代码

 

ExpandedBlockStart.gif
代码
1
using
 System;
2
using
 System.Collections;
3
using
 System.Configuration;
4
using
 System.Data;
5
using
 System.Linq;
6
using
 System.Web;
7
using
 System.Web.Security;
8
using
 System.Web.UI;
9
using
 System.Web.UI.HtmlControls;
10
using
 System.Web.UI.WebControls;
11
using
 System.Web.UI.WebControls.WebParts;
12
using
 System.Xml.Linq;
13
14
public
 
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的客户端代

ExpandedBlockStart.gif
代码
<
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代码,

  动态加载用户控件代码

 

ExpandedBlockStart.gif
代码
1
using
 System;
2
using
 System.Collections;
3
using
 System.Configuration;
4
using
 System.Data;
5
using
 System.Linq;
6
using
 System.Web;
7
using
 System.Web.Security;
8
using
 System.Web.UI;
9
using
 System.Web.UI.HtmlControls;
10
using
 System.Web.UI.WebControls;
11
using
 System.Web.UI.WebControls.WebParts;
12
using
 System.Xml.Linq;
13
14
public
 
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
}

 

 

 

转载于:https://www.cnblogs.com/hendy/archive/2010/04/21/1717292.html

你可能感兴趣的文章
斐波那契数列
查看>>
function(){} 与(function(){})()的区别
查看>>
作用域
查看>>
yii2高级模板安装
查看>>
ROS学习笔记(六)——创建、编译包
查看>>
SVN服务器搭建(一)
查看>>
js 控制台输出
查看>>
图像处理基础知识
查看>>
串行写队列的MYSQL大文本参数
查看>>
云平台服务运行情况检测脚本V0.1
查看>>
Elasticsearch: 权威指南---基础入门
查看>>
python selenium chrome有界面与无界面模式
查看>>
【Unity游戏开发】Android6.0以上的动态权限申请问题
查看>>
1040 有几个PAT(25 分)
查看>>
1033 旧键盘打字(20 分)
查看>>
Beta总结
查看>>
Spring.NET学习笔记
查看>>
python基础小练习
查看>>
Spring杂记BeanFactory之getBean方法
查看>>
linux 下 tcpdump 命令详解
查看>>