Как добавить UserControl в другой UserControl? - PullRequest
1 голос
/ 02 сентября 2010

У меня есть UserControl под названием UC_Widget , он наследуется от System.Web.UI.UserControl и ITextControl.Он также переопределяет функцию AddParsedSubObject.Когда я использую его, как показано ниже, он работает хорошо.

<uc1:UC_Widget ID="UC_Widget1" runat="server">
  hello world
</uc1:UC_Widget>

, но возникает проблема: если я хочу использовать этот элемент управления, чтобы содержать другой пользовательский элемент управления, как я могу сделать это ??многие, спасибо!

<uc1:UC_Widget ID="UC_Widget1" runat="server">
hello world
    <uc1:UC_Widget ID="UC_Widget2" runat="server">
     guy
    </uc1:UC_Widget>
</uc1:UC_Widget>

спасибо, Никс, я решил проблему методом AddParsedSubObject.

protected override void AddParsedSubObject(object obj)
        {
            if (this.HasControls())
            {
                base.AddParsedSubObject(obj);
            }
            else if (obj is LiteralControl)
            {
                HtmlContent.Append(((LiteralControl)obj).Text);
                this.Text = HtmlContent.ToString();
            }
            else
            {
                string text1 = this.Text;

                UC_eClinicWidget tmp = obj as UC_eClinicWidget;
                if (tmp != null)
                {
                    HtmlContent.Append(GetControlHtml(tmp));
                    this.Text = HtmlContent.ToString();
                }
            }
        }

Ответы [ 2 ]

0 голосов
/ 02 сентября 2010

Хотя, возможно, есть лучший дизайн, это все же возможно.

  1. Сначала оцените, что вы не можете вытащить повторяющуюся часть. В вашем примере фрагмент, который вы могли бы * вытащить, был бы текстом. Если вы можете разбить свой контроль на более мелкие части, это сделает ваш общий дизайн менее сложным.
  2. Убедитесь, что вы определили условие остановки. Как и в случае любой рекурсии, вы должны остановить ее, иначе вы получите переполнение стека :).

Пример счетчика для @Tom Vervoort

<asp:UpdatePanel>
    <ContentTemplate>
        <asp:UpdatePanel>
            <ContentTemplate>
                Hi there
            </ContentTemplate>
        </asp:UpdatePanel>
    </ContentTemplate>
</asp:UpdatePanel> 
0 голосов
/ 02 сентября 2010

Это приведет к бесконечному циклу ... если UC_Widget содержит другой UC_Widget, то внутренний UC_Widget также будет содержать UC_Widget и так далее.Вам нужно будет придумать лучший дизайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...