【问题标题】:Is it possible to have a Custom Control's TagName different from the Control's ClassName?自定义控件的 TagName 是否可以与控件的 ClassName 不同?
【发布时间】:2014-04-10 21:32:40
【问题描述】:

我正在构建我的第一个 ASP.net 自定义控件,并且正在试验设置控件初始标记的 ToolboxDataAttribute。

到目前为止,我所看到的是,您无法为控件选择任何所需的标记名称,因为它应该与控件的 className 匹配才能正常工作。在此示例中,我有“MyControl”类并使用 ToolboxDataAttribute 设置了自定义 TagName:

[DefaultProperty("Text")]
[ToolboxData("<{0}:MyCustomTagName runat=server></{0}:MyCustomTagName>")]
public class MyControl : WebControl
{
}

当我尝试在项目中使用此自定义控件时,我将其从工具箱中拖放并呈现为:

<%@ Register assembly="TestCustomControl" namespace="TestCustomControl" tagprefix="cc1" %>
...
<cc1:MyCustomTagName ID="MyCustomTagName1" runat="server"></cc1:MyCustomTagName>

但是当我尝试运行它时,项目一直告诉我:MyCustomTagName 不是已知元素,我无法构建它。

我玩了一下,意识到如果我将 TagName 更改为控件的 ClassName,控件就可以工作,所以以下工作:

<cc1:MyControl ID="MyCustomTagName1" runat="server"></cc1:MyControl>

所以我的问题是:

如果您不能更改控件的 tagName,那么 ToolboxDataAttribute 的意义何在? 我可以想象它可能是为了从头开始添加更多标记,但我想知道我是否可能会出现 TagName 与控件的 ClassName 不匹配的情况。

我尝试将 TagName 属性添加到 @Register 指令,但如果我这样做了,它会要求 Src 属性,因为它属于用户控件语法而不是自定义控件语法。有什么想法吗?

【问题讨论】:

    标签: asp.net controls custom-controls naming custom-attributes


    【解决方案1】:

    正如您所怀疑的,ToolboxData 属性的主要用途是为控件的默认值提供附加标记。来自MSDN

    要指定初始默认值,控件可以利用这个 属性。您可以使用此属性自定义初始 HTML 拖动控件时放置在设计器中的内容 从工具箱到表单。

    对于自定义控件,只有标记前缀可以自定义并注册为与程序集中的命名空间相关。控件本身是通过使用类名作为标记名来标识的。您不能像对用户控件那样更改它。

    我同意您的观点,ToolboxData 属性的设计会在您指定包含标签名称的完整标签时尝试更改标签名称 - 尽管标签前缀有一个占位符。如果标签名称也有一个占位符,那会更简洁。当您更改自定义控件的类名并忘记更改ToolboxData 属性中的字符串时,这也可以避免错误。

    【讨论】:

    • 但是当我们添加[assembly:TagPrefix("MyControls","RequiredTextBox")]这个控件不能添加到工具箱中。错误:DLL中没有可以放在工具箱上的组件
    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多