ASP.NET自定义控件

问题描述:

如何创建自定义控件(而不是ASCX控件),更重要的是,在您的项目中使用它?我不想创建一个单独的项目或将它编译为DLLASP.NET自定义控件

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

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

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

首先,创建一个类库项目并将其添加到您的解决方案,我会打电话给我的“CustomControls.dll”。

一旦出现,添加一个简单的类是你的三夏:

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

生成项目,并将其添加为您主要网络项目的引用。

现在,在您要使用该控件的ASPX页面,需要注册,所以将其添加为在ASPX第一行Page指令后:

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

现在,你应该有一个名为<的控件示例:您好,您可以使用>。在intellisense中显示可能需要一分钟。

+0

非常感谢!这不仅解决了我的问题,而且帮助我成为了一名开发人员。 – 2008-11-20 19:09:05

为控件创建类并生成解决方案。如果一切顺利,控制器现在可以在工具箱上使用。

有时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> 

如果你不想要一个* .ascx文件,你不想要一个单独的项目,并且你不想要一个* .dll文件,你认为剩下的是什么?代码必须在某个地方居住。

你提到你想避免创建一个单独的项目。正如其他答复所指出的那样,仅仅创建一个新项目来存储自定义控件并引用它就更为常见了。这是可能的,但是,登记在同一项目中定义的控制,使用常规语法:

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

凡“集结号”是其中两个控制和页面所在的装配。如果您使用的是Web应用程序项目,而不是Web站点,这会更容易。