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か?

試してみるべきもう 1 つのことは、可能であればref()のプロパティを作成することです。ITemplateItemおそらく、その Interface は の Type になり、プロパティ?<TemplateItem />が含まれていない理由が説明されます。Ref

(これは、プロパティの戻り値の型によって型が指定されていることを前提としていますTemplateItem())。

于 2012-09-16T19:50:32.940 に答える