第四章 用户控件:从页面到控件
用户控件是一种服务器控件,以.ascx为扩展名存储成文本文件,不需要预编译。
用户控件能够在另外的用户控件内使用,如果想通过另外的用户控件方位一个用户控件的话,必须通过所包含的用户控件注册内部的(嵌套)用户控件。
“~”语法在Src attribute中指定相对URL的值
如果页面使用code-behind模型,也应该在用户控件中使用该模型,但如果混合使用这两种模型,可能会出错,比如用户无法通过编程方式从包含.aspx页面的code-behind类中访问含有嵌入式脚本块的用户控件的成员,但如果为用户控件定义一个code-behind类,则这样的访问是可能的。
实例化一个用户控件不能用new语法来通过编程方式实现,要通过编程方式创建用户控件,一定要调用包含页面的LoadControl方法,LoadControl方法接收到用户控件源文件的相对路径并且返回一个类型为Control的对象,可以将该对象转换成用户控件的强类型,Reference指令为用户控件指定到.ascx文件的相对路径。页面用PlaceHolder控件为生成动态增加的用户控件标记其在页面中的位置。
缓存用户控件OutputCache指令的四种情况:
1)用Duration attribute指定缓存时间
2)指定Duration和VaryByParam attribute
如果用户控件的输出依赖于GET或是POST参数,则用此版本的缓存,VaryByParam attribute指定GET查询字符串参数或是表单POST参数,为VaryByParam attribute的参数列表中的每个新名/值对产生一个新的缓存条目,多个参数用“;”分开,如VaryByParam = "category;selectionID"。如果指定VaryByParam ="*",则请求的所有参数都用来管理缓存。
3)指定Duration和VaryByControl attribute
VaryByControl attribute指定一个或多个子控件ID,它们对应包含在用户控件内的表单控件,为每个到指定控件的新输入组合建立一个新的缓存条目。
4)指定Duration和VaryByCustom attribute
VaryByCustom attribute指定一个用来管理缓存的字符串,这个版本中,虽然不使用VaryByParam attribute但是一定要包括它而且设定成None。
当使用VaryByCustom attribute的时候,必须为应用程序在Global.asax文件中重载GetVaryByCustomString方法。(P78)
用户控件缓存如何工作(P80)
如有OutputCache指令的用户控件声明实例时,它创建一个StaticPartialCachingControl类的实例并且将其加到控件树中的用户控件的逻辑位置上。
如有OutputCache指令的用户控件动态增加到页面中,解析器改为创建一个PartialCachingControl类的实例。
StaticPartialCachingControl或PartialCachingControl对象能够向ASP.NET缓存对象加入并且从中取回条目。
如果用户控件中有应用的OutputCache指令,一定要在从包含页面通过编程方式访问它之前核查用户控件的存在(例如,myUserID != null),这个步骤是必须的,因为当一个缓存条目存在而用户控件的实例没有创建的情况下,当访问用户控件的时候,会得到空引用异常。
用户控件能够在另外的用户控件内使用,如果想通过另外的用户控件方位一个用户控件的话,必须通过所包含的用户控件注册内部的(嵌套)用户控件。
“~”语法在Src attribute中指定相对URL的值
1
<%@ Register TagPrefix="mspuc" TagName="SiteHeader" Src="~/UserControls/SiteHeader.ascx"%>
<%@ Register TagPrefix="mspuc" TagName="SiteHeader" Src="~/UserControls/SiteHeader.ascx"%>实例化一个用户控件不能用new语法来通过编程方式实现,要通过编程方式创建用户控件,一定要调用包含页面的LoadControl方法,LoadControl方法接收到用户控件源文件的相对路径并且返回一个类型为Control的对象,可以将该对象转换成用户控件的强类型,Reference指令为用户控件指定到.ascx文件的相对路径。页面用PlaceHolder控件为生成动态增加的用户控件标记其在页面中的位置。
1 <%@ Reference Control="UserControls/LinkGlyph.ascx" %>
2
3 <script runat="server">
4 protected override void OnLoad(EventArgs e) {
5 LinkGlyph demo = (LinkGlyph)Page.LoadControl("UserControls/LinkGlyph.ascx");
6 demo.NavigateUrl = "CruiseSelectorTest.aspx";
7 demo.Text = "Click Me";
8 holder.Controls.Add(demo);
9 }
10</script>
11
12 <asp:PlaceHolder id="holder" runat="server" />
2
3 <script runat="server">
4 protected override void OnLoad(EventArgs e) {
5 LinkGlyph demo = (LinkGlyph)Page.LoadControl("UserControls/LinkGlyph.ascx");
6 demo.NavigateUrl = "CruiseSelectorTest.aspx";
7 demo.Text = "Click Me";
8 holder.Controls.Add(demo);
9 }
10</script>
11
12 <asp:PlaceHolder id="holder" runat="server" />
缓存用户控件OutputCache指令的四种情况:
1)用Duration attribute指定缓存时间
1 <%@ OutputCache Duration="1200" VaryByParam="none" %>
1 <%@ OutputCache Duration="1200" VaryByParam="category" %>
3)指定Duration和VaryByControl attribute
1 <%@ OutputCache Duration="1200" VaryByControl="list1;radio1" %>
4)指定Duration和VaryByCustom attribute
1 <%@ OutputCache Duration="1200" VaryByCustom="CustomString" VaryByParam="none" %>
当使用VaryByCustom attribute的时候,必须为应用程序在Global.asax文件中重载GetVaryByCustomString方法。(P78)
用户控件缓存如何工作(P80)
如有OutputCache指令的用户控件声明实例时,它创建一个StaticPartialCachingControl类的实例并且将其加到控件树中的用户控件的逻辑位置上。
如有OutputCache指令的用户控件动态增加到页面中,解析器改为创建一个PartialCachingControl类的实例。
StaticPartialCachingControl或PartialCachingControl对象能够向ASP.NET缓存对象加入并且从中取回条目。
如果用户控件中有应用的OutputCache指令,一定要在从包含页面通过编程方式访问它之前核查用户控件的存在(例如,myUserID != null),这个步骤是必须的,因为当一个缓存条目存在而用户控件的实例没有创建的情况下,当访问用户控件的时候,会得到空引用异常。
posted on 2006-01-04 09:09 ............. 阅读(176) 评论(0) 收藏 举报
浙公网安备 33010602011771号