質問

私自身のサーバーコントロールでは、に似たものを実装したいと思います ListView:

<asp:ListView runat="server">
    <LayoutTemplate>
        <asp:PlaceHolder runat="server" id="itemPlaceholder" />
    </LayoutTemplate>
</asp:ListView>

私は作成しました ITemplate プロパティ、私はASPXページでレイアウトを設定することができ、私はやっています ITemplate.InstantiateIn(myControl).

しかし、プレースホルダーにコントロールを挿入する方法を理解することはできません。私はそれがそのようなものになると思います MyTemplate.FindControl("itemPlaceholder").Controls.Add(myControl). 。私は自分のタイプにキャストしようとしました ITemplate, 、しかし、私はエラーが得られます:

Unable to cast object of type 'System.Web.UI.CompiledTemplateBuilder' to type 'MyNamespace.MyLayoutTemplate'

何が足りないの?

編集: 私はちょうどこれを見つけました: http://www.nikhilk.net/singleinstanceTemplates.aspx Control developers can define templates to be single instance using metadata which causes the ID'd controls within the template contents to be promoted to the page level... The parser and code-generator together work behind the scenes to add member fields, and initialize them at the right time.. 。ユーザーコントロールのみのようですか?私は試した Page.FindControl() これをした後、何も見つかりませんでした。

役に立ちましたか?

解決

わかりました、これは単に問題でした ユーザーエラー. 。私はインスタンスしました ITemplatePanel, 、明らかに Page.FindControl() (これは再帰的ではありません)機能しません。一度やった Panel.FindControl(), 、すべてがうまくいった。

他のヒント

過去に私はこのライブラリを成功して使用しましたhttp://www.denisbauer.com/aspnetcontrols/dynamiccontrolsplaceholder.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top