我将(下方)的代码工作,除非我将ref="abc"
添加到TemplateItem
代码。如果包含它我会收到此错误:
属性'templateItem'没有名为'ref'的属性
如何解决此问题?
Default.aspx的
<%@ Register Src="~/message.ascx" TagName="Message" TagPrefix="uc" %>
<uc:Message ID="msg" runat="server" abc="123" >
<TemplateItem ref="abc">Hi</TemplateItem>
</uc:Message>
message.ascx
<asp:placeholder runat="server" id="PlaceHolder1" />
message.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
答案 0 :(得分:0)
你确定它应该是:
Public Class TemplateItem2
在底部,而不只是以下?:
Public Class TemplateItem
(如果你只是想要一个与该属性不同的名称,那么TemplateItemImplementation
或TemplateItemImpl
之类的内容会更清楚吗?)
另外,我不确定这是如何工作的:
TemplateItem.InstantiateIn(PlaceHolder1)
MSDN page on CompiledTemplate.InstantiateIn()说:此API支持.NET Framework基础结构,不能直接在您的代码中使用。我想这是一个旁注,我是假设你已经按照自己想要的方式工作......
我认为问题与该行TemplateItem
的实例化有关;我看不出TemplateItem2
(包含属性ref()
)与ITemplateItem
的关系。也许您只需要让TemplateItem2
同时实施ITemplateItem
?
如果可能的话,另一件事是让ref()
成为ITemplateItem
的属性。也许该接口成为<TemplateItem />
的类型,这可以解释为什么它不包含属性Ref
?
(假设类型由属性TemplateItem()
的返回类型指定)。