1

我拥有的代码(如下)可以工作,除非我将 添加ref="abc"TemplateItem标签中。包含它时,我收到此错误:

属性“TemplateItem”没有名为“ref”的属性

我该如何解决这个问题?

默认.aspx

<%@ Register Src="~/message.ascx" TagName="Message" TagPrefix="uc" %>

<uc:Message ID="msg" runat="server" abc="123" >
    <TemplateItem ref="abc">Hi</TemplateItem>
</uc:Message>

消息.ascx

<asp:placeholder runat="server" id="PlaceHolder1" />

消息.ascx.vb

Partial Class message
Inherits System.Web.UI.UserControl

    Public Property abc() As String

    Sub Page_Init()
        If TemplateItem IsNot Nothing Then
            TemplateItem.InstantiateIn(PlaceHolder1)
        End If
    End Sub

    Private m_TemplateItem As ITemplate = Nothing

    <TemplateContainer(GetType(TemplateItem2))> _
    Public Property TemplateItem() As ITemplate
        Get
            Return m_TemplateItem
        End Get
        Set(ByVal value As ITemplate)
            m_TemplateItem = value
        End Set
    End Property

    Public Class TemplateItem2
        Inherits Control
        Implements INamingContainer

        Public Property ref() As String
    End Class

End Class
4

1 回答 1

0

你确定它应该是:

Public Class TemplateItem2 

在底部,而不仅仅是以下内容?:

Public Class TemplateItem

(如果您只是想要一个与该属性不同的名称,也许类似TemplateItemImplementation或只是TemplateItemImpl更清楚?)

另外,我不确定这是如何工作的:

    TemplateItem.InstantiateIn(PlaceHolder1)

CompiledTemplate.InstantiateIn() 上的MSDN 页面说:此 API 支持 .NET Framework 基础结构,不打算直接从您的代码中使用。我想这是一个旁注,我假设你已经让它按照你想要的方式工作......

我认为问题与TemplateItem该行中的实例化有关;我看不到如何TemplateItem2(其中包含属性ref())与ITemplateItem. 也许您只需要TemplateItem2同时实现ITemplateItem

另一件要尝试的事情是制作ref()ITemplateItem如果可能的属性。也许那个接口变成了的类型<TemplateItem />,这可以解释为什么它不包含属性Ref?。

(即假设类型由属性的返回类型指定TemplateItem())。

于 2012-09-16T19:50:32.940 回答