2012-09-16 31 views
1

我的代碼(下)的工作原理除了將ref="abc"添加到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 

的底部都有,而不是隻以下?:

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()的返回類型指定)。

相關問題