Проблема с Templated Control
От: FrozenSky  
Дата: 11.01.11 08:57
Оценка:
есть контрол

    [ParseChildren(ChildrenAsProperties = true)]
    [PersistChildren(true)]
    public class DropDownPanel : Control, INamingContainer
    {
        [PersistenceMode(PersistenceMode.InnerProperty)]
        [TemplateContainer(typeof(DropDownPanelContainer))]
        public ITemplate Template { get; set; }
        private DropDownPanelContainer _container;

        protected override void CreateChildControls()
        {
            if (Template != null)
            {
                _container = new DropDownPanelContainer(this);
                Template.InstantiateIn(_container);
                Controls.Add(_container);
            }
            else
            {
                _container = new DropDownPanelContainer(this);
                _container.Controls.Add(new LiteralControl("Шаблон не задан"));
            }
        }

        protected override void OnDataBinding(EventArgs e)
        {
            EnsureChildControls();
            base.OnDataBinding(e);
        }

        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write("<b>begin</b><br />");
            _container.RenderControl(writer);
            writer.Write("<b>end</b><br />");
        }
    }

    public class DropDownPanelContainer : Control, INamingContainer
    {
        private DropDownPanel _parent = null;

        public DropDownPanelContainer(DropDownPanel p)
        {
            _parent = p;
        }

    }


есть страница, которая его пользует:


    <div>
        <cc:DropDownPanel ID="dd" runat="server">
            <Template>
                <asp:Button ID="Button1" runat="server" Text="Button"></asp:Button>
            </Template>
        </cc:DropDownPanel>
    </div>



Проблема в следующем: когда я делаю вот так:

        protected void Page_Load(object sender, EventArgs e)
        {
            dd.DataBind();
            Button1.Text = "sss";
        }


Вылетает исключение, что Button1 равен null. Что я делаю не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.