• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Stand By .NET

.NET & SQL Server
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

第四章 用户控件:从页面到控件

    用户控件是一种服务器控件,以.ascx为扩展名存储成文本文件,不需要预编译。 
    用户控件能够在另外的用户控件内使用,如果想通过另外的用户控件方位一个用户控件的话,必须通过所包含的用户控件注册内部的(嵌套)用户控件。
    “~”语法在Src attribute中指定相对URL的值
1<%@ Register TagPrefix="mspuc" TagName="SiteHeader" Src="~/UserControls/SiteHeader.ascx"%>
    如果页面使用code-behind模型,也应该在用户控件中使用该模型,但如果混合使用这两种模型,可能会出错,比如用户无法通过编程方式从包含.aspx页面的code-behind类中访问含有嵌入式脚本块的用户控件的成员,但如果为用户控件定义一个code-behind类,则这样的访问是可能的。


    实例化一个用户控件不能用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" />

    缓存用户控件OutputCache指令的四种情况:
    1)用Duration attribute指定缓存时间
1 <%@ OutputCache Duration="1200" VaryByParam="none" %>
    2)指定Duration和VaryByParam attribute
1 <%@ OutputCache Duration="1200" VaryByParam="category" %>
    如果用户控件的输出依赖于GET或是POST参数,则用此版本的缓存,VaryByParam attribute指定GET查询字符串参数或是表单POST参数,为VaryByParam attribute的参数列表中的每个新名/值对产生一个新的缓存条目,多个参数用“;”分开,如VaryByParam = "category;selectionID"。如果指定VaryByParam ="*",则请求的所有参数都用来管理缓存。
    3)指定Duration和VaryByControl attribute
1 <%@ OutputCache Duration="1200" VaryByControl="list1;radio1" %>
    VaryByControl attribute指定一个或多个子控件ID,它们对应包含在用户控件内的表单控件,为每个到指定控件的新输入组合建立一个新的缓存条目。
    4)指定Duration和VaryByCustom attribute
1 <%@ OutputCache Duration="1200" VaryByCustom="CustomString" VaryByParam="none" %>
    VaryByCustom attribute指定一个用来管理缓存的字符串,这个版本中,虽然不使用VaryByParam attribute但是一定要包括它而且设定成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)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3