【问题标题】:Custom Web Control, ITemplate not recognised自定义 Web 控件,无法识别 ITemplate
【发布时间】:2010-10-19 20:28:35
【问题描述】:

希望一个简单的,我创建了一个自定义中继器控件,它扩展了 System.Web.UI.WebControls.Repeater。我已向此控件添加了两个 ITemplate 属性,并在需要时以所需的方式添加它们。一切正常,但我在 Visual Studio 中遇到了识别这些新模板的问题。

当我将转发器添加到页面时,例如:

<my:Repeater ID="rpt" runat="server" NewProperty="This works!">
    <NewTemplate>The contents go here...</NewTemplate>
</my:repeater>

一切正常(哇!),当我添加属性“NewProperty”时,我添加的一个属性可以在 Visual Studio 的 Intellisense 中按预期看到(哇!)。令人烦恼的是,虽然新的 ITemplate 无法通过 Intellisense 获得,但我必须从他们在那里的知识中回忆起这一点(嘘!)。新模板还带有“问题”下划线,并带有以下消息:

验证(XHTML 1.0 过渡):不支持元素“newtemplate”。

这无论如何都不是什么大问题,因为当编译自定义转发器时,模板会按照他们的需要运行,这更像是一个烦人的问题,如果能解决的话。

感谢您的帮助!

史蒂夫

【问题讨论】:

    标签: .net visual-studio custom-server-controls itemplate


    【解决方案1】:

    XHTML 要求元素名称以小写字母开头。 HTML 不区分大小写,而 XHTML 是。

    来源:http://www.w3.org/TR/xhtml1/#h-4.2

    为了使该属性可见,您需要将 PersistenceMode 属性添加到您的 ITemplate 属性中,如下所示:

    [PersistenceMode(PersistenceMode.InnerProperty)]
    public ITemplate NewTemplate
    {
       get;
       set;
    }
    

    【讨论】:

    • 您好 Jose,我不确定您是否理解这个问题,因为 ItemTemplate、HeaderTemplate 等都是大写的。问题在于 Visual Studio 无法识别模板,因此它假定它们是 XHTML 元素,而实际上它们不是。我希望有办法确保 VS 知道它们。
    • 这是用户控件还是服务器控件?
    • 公共类Repeater继承System.Web.UI.WebControls.Repeater ....这是一个增强的服务器控件
    • 您需要将以下属性添加到您的 ITemplate 属性 [PersistenceMode(PersistenceMode.InnerProperty)]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 2019-08-27
    • 2016-01-30
    • 2012-08-04
    相关资源
    最近更新 更多