0

ASP.Net: User control with content areaのソリューションに関しては、 明らかに可能ですが、詳細が必要です

私は同じことをしようとしていますが、ここに私のコードがあります:

背後にある制御コード:

[ParseChildren(true, "Content")]
[PersistChildren(false)]
public partial class SlidingPanelControl : System.Web.UI.UserControl
{
    protected override void OnInit(EventArgs e)
    {
        phContent.Controls.Add((Control)_content);
        base.OnInit(e);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    private PlaceHolder _content;
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public PlaceHolder Content { get { return _content; } set { _content = value; } }
}

コントロール ASPX:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SlidingPanelControl.ascx.cs" Inherits="Photography.Controls.MbExtruder.SlidingPanelControl" %>
<div>
<asp:Panel ID="pnlLockable" runat="server" Visible="False">
    <asp:PlaceHolder runat="server" ID="phContent" />
</asp:Panel>
</div>

これは、メイン ページでコントロールを使用する方法です。

<uc1:SlidingPanelControl runat="server" ID="SlidingPanelControl"
    Title="About" Position="right" Opacity="1" WidthInPixels="600">
    <Content><h1>hello world</h1></Content>
</uc1:SlidingPanelControl>

これは私にとってはうまくいきませんでした.htmlをコントロールプレースホルダーにレンダリングしませんでした. コントロールの OnInit をデバッグすると、設定したすべての html を持つ _content コントロールが表示されます (つまり<h1>Hello World</h1>、この例では)

私が間違っていることを推測しますか?

ありがとう

4

1 に答える 1

0

わかりましたので、コンピューターで確認したところ、実際に機能するソリューションが見つかりました。

[ParseChildren(false)]
[PersistChildren(false)]
public partial class WebUserControl1 : System.Web.UI.UserControl
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (Content != null)
        {
            ContentContainer container = new ContentContainer();
            Content.InstantiateIn(container);
            phContent.Controls.Add(container);
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    private ITemplate _content;
    [PersistenceMode(PersistenceMode.InnerDefaultProperty),
    DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
    TemplateInstance(TemplateInstance.Single)]
    public ITemplate Content
    {
        get
        {
            return _content;
        }
        set
        {
            _content = value;
        }
    }
}

public class ContentContainer : Control, INamingContainer
{
}

私はそれが魅力のように機能することを自分で確認しました。他のソースのコードはあなたのものと同じです。

于 2014-05-01T09:18:18.260 に答える