zoukankan      html  css  js  c++  java
  • asp.net 快速引用用户自定义控件技巧一例!

    按步骤列出:
    1. 在同一个子目录下建两个ascx,并分别在web.config下注册;
    2. 分别在aspx里调用这两个ascx文件,均成功;
    3. 在其中一个ascx(定为A)里用标签语法加载另一个ascx(定为B),再在aspx文件中用标签语法加载定为A的ascx,显然就出错了,系统会提示同一目录下控件互相嵌套(请教这里的达人解决!!!)
    4. 如果将这两个ascx分别放在不同的子目录下,问题解决

    ///

    问题:

    在ASP.NET 的早先版本里,开发人员通过在页面的顶部添加 <%@ Register %> 指令来引入和使用自定义服务器控件和用户控件时,象这样:

    <%@ Register TagPrefix="scott" TagName="header" Src="Controls/Header.ascx" %>
    <%@ Register TagPrefix="scott" TagName="footer" Src="Controls/Footer.ascx" %>
    <%@ Register TagPrefix="ControlVendor" Assembly="ControlVendor" %>

    <html>
    <body>
        
    <form id="form1" runat="server">
            
    <scott:header ID="MyHeader" runat="server" />
        </
    form>
    </body>
    </html>

    注意到上面的前两个注册指令是用来注册用户控件的(是在.ascx文件里实现的),最后这个是用来注册编译进一个程序集 .dll 文件里的自定义控件的。注册完后,开发人员可以在页面的任何地方用设定好的 tagprefix (标识前缀)和标识符号名( tagname)来声明这些控件。

    这行之有效,但管理起来会很痛苦,当你要在你的网站的许多页面上使用控件的话,尤其是,假如你移动了.ascx 文件,需要更新所有的注册声明的话。

    解决方案:

    ASP.NET 2.0 使得控件声明极其干净而且管理起来极其容易。不用在你的页面上重复这些声明,只要在你的应用的web.config 文件的新的 pages->controls 部分声明一次即可:

    <?xml version="1.0"?>

    <configuration>

      
    <system.web>
        
        
    <pages>
          
    <controls>
            
    <add tagPrefix="scottgu" src="~/Controls/Header.ascx" tagName="header"/>
            <
    add tagPrefix="scottgu" src="~/Controls/Footer.ascx" tagName="footer"/>
            <
    add tagPrefix="ControlVendor" assembly="ControlVendorAssembly"/>
          </
    controls>
        
    </pages>

      
    </system.web>

    </configuration>

    你可以用这种方式同时声明用户控件和编译好的自定义控件。当你使用这个技巧时,Visual Studio是完全支持这两者的,而且 VS 2005 Web Site 项目 和 VS 2005 Web Application 项目也都支持这两者。Visual Studio会在设计器里以所见即所得(WYSIWYG)模式显示这些控件,也会在后台编码文件里提示控件字段的声明。

    需要注意的是,上面用户控件中“~”句法的使用。对那些不熟悉这个符号的人,ASP.NET中“~”符号意思是“从应用的根路径来定位”,它提供了一个很好的方法来避免在你的编码里到处使用“..\”。在web.config文件里声明用户控件时,你总是应该使用它,因为页面也许会使用在不同子目录里的控件,所以你应该总是始终如一地从应用的根路径开始定位这些控件。

    一旦你在web.config 文件中声明好这些控件后,你就可以在你网站上的任何一个页面,母板页或者用户控件中使用它们了,象这样(不再需要注册指令):

    <html>
    <body>
        
    <form id="form1" runat="server">
            
    <scottgu:header ID="MyHeader" runat="server" />
        </
    form>
    </body>
    </html>
  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/12go/p/2230383.html
Copyright © 2011-2022 走看看