代码之家  ›  专栏  ›  技术社区  ›  Arthur Chaparyan

ASP.NET自定义控件

  •  2
  • Arthur Chaparyan  · 技术社区  · 17 年前

    如何创建自定义控件(而不是ascx控件),更重要的是,如何在项目中使用它?我不希望为它创建单独的项目或将其编译为dll

    4 回复  |  直到 13 年前
        1
  •  8
  •   FlySwat    17 年前

    服务器控件应编译为DLL。应该没有理由害怕在您的项目中有一个额外的组装,它有助于创建良好的项目组织。

    ASP.NET服务器控件实际上是程序集中的自定义类。它们没有关联的“ascx”标记文件。

    要使用ASP.NET服务器控件,需要告诉ASP.NET在哪里查找其类。

    首先,创建一个类库项目并将其添加到您的解决方案中,我将调用我的“customcontrols.dll”。

    在那里,添加一个简单的类作为您的WebControl:

    public class Hello : System.Web.UI.WebControl
    {
        public override Render(HtmlTextWriter writer)
        {
            writer.Write("Hello World");
            base.Render(writer);
        }
    }
    

    构建项目,并将其添加为对主Web项目的引用。

    现在,在要使用此控件的ASPX页中,需要注册它,因此在page指令后将其作为ASPX中的第一行添加:

    <%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly = "CustomControls" %>
    

    现在,您应该可以使用名为<example:hello>的控件。可能需要一分钟的时间才能以智能的方式出现。

        2
  •  1
  •   Bruno Shine    17 年前

    为控件创建类并生成解决方案。如果一切正常,现在工具箱上应该可以使用控件。

    有时候vs不更新工具箱。如果发生这种情况,请将register指令添加到页面:

    <%@ Register Assembly="NAME_OF_THE_ASSEMBLY" Namespace="NAMESPACE_OF_THE_CUSTOM_CONTROL" TagPrefix="cc1" %>
    

    然后使用页面上的控件:

    <cc1:mycustompanel id="MyCustomPanel1" runat="server"><asp:TextBox id="TextBox1" runat="server"></asp:TextBox></cc1:mycustompanel>
    
        3
  •  1
  •   Joel Coehoorn    17 年前

    如果不需要*.ascx文件,不需要单独的项目,也不需要*.dll文件,您认为还剩什么?代码必须存在于某个地方。

        4
  •  1
  •   MysticFireball    16 年前

    您提到希望避免创建单独的项目。正如其他响应所指出的那样,简单地创建一个新项目来存储自定义控件并引用它是更常见的。但是,可以使用常规语法注册在同一项目中定义的控件:

    <%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly="CustomControls" %>
    

    其中“assembly”是控件和页面所在的程序集。如果您使用的是一个Web应用程序项目,而不是一个Web站点,那么这样做会容易得多。

    推荐文章