您如何创建自定义控件(不是 ASCX 控件),更重要的是,如何在您的项目中使用它?我不想为其创建单独的项目或将其编译为 DLL
4 回答
服务器控件应编译为 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 页面中,您需要注册它,因此将其添加为页面指令之后 aspx 的第一行:
<%@ Register TagPrefix="Example" Namespace="CustomControls" Assembly = "CustomControls" %>
现在,您应该可以使用一个名为 <Example:Hello> 的控件。在智能感知中出现可能需要一分钟。
为控件创建类并构建解决方案。如果一切顺利,控件现在应该可以在工具箱上使用。
有时 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 应用程序项目,而不是网站,这会更容易。