2012-09-16 5 views
1

(아래) 코드는 을 TemplateItem 태그에 추가 할 때를 제외하고 모두 작동합니다. 그것이 포함되면 나는이 오류가 발생합니다 :웹 사용자 정의 컨트롤에서 INamingContainer에 속성을 추가 할 수 없습니다.

Property 'TemplateItem' does not have a property named '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

는해야 확인을 위치 :

Public Class TemplateItem2 
0 이 하단에

,뿐 아니라 다음?

Public Class TemplateItem 

(TemplateItemImplementation처럼 그냥 호텔에서 다른 이름을 원하는 경우에, 어쩌면 뭔가하거나 TemplateItemImpl 더 명확 것?)

을 또한, 나는 이것이 어떻게 작동하는지 확실하지 않다 :

TemplateItem.InstantiateIn(PlaceHolder1) 

MSDN page on CompiledTemplate.InstantiateIn()는 말한다 : 이 API는 .NET Framework 인프라를 지원하며 수 없습니다 코드에서 직접 사용됩니다. 내 생각에 이것은 sidenote 일 뿐이며, 내가 원하는대로 작동하도록했다고 가정합니다.

문제는 그 행의 TemplateItem의 인스턴스화와 관련이 있다고 생각합니다. (ref() 속성 포함)이 ITemplateItem과 어떻게 관련되는지 알 수 없습니다. 어쩌면 TemplateItem2ITemplateItem을 구현해야할까요?

가능하면 ref()의 속성을 ITemplateItem으로 설정하는 것이 좋습니다. 인터페이스가 <TemplateItem />의 유형이되어 아마도 왜 Ref? 속성이 포함되어 있지 않은지 설명해야합니다.

(이는 유형이 TemplateItem() 속성의 반환 유형에 의해 지정된다고 가정합니다).

관련 문제