Pergunta

Eu tenho um controle de servidor que contém controles de servidores aninhados,

<uc1:ArticleControl runat="server">
     <HeadLine></HeadLine>
     <Blurb></Blurb>
     <Body></Body>
</uc1:ArticleControl>

Código:

[ToolboxData("<{0}:ArticleControl runat=server></{0}:ArticleControl>")]
[ParseChildren(ChildrenAsProperties = true)]
public class ArticleControl : WebControl
{

    [PersistenceMode(PersistenceMode.InnerProperty)]
    public HeadLineControl HeadLine 
    {
        get;
        set;
    }

    [PersistenceMode(PersistenceMode.InnerProperty)]
    public BlurbControl Blurb
    {
        get;
        set;
    }

    [PersistenceMode(PersistenceMode.InnerProperty)]
    public BodyControl Body
    {
        get;
        set;
    }
}

Definição de controle aninhada (aplica -se a todos os controles aninhados):

 public class HeadLineControl : ControlBase
     {
          public HeadLineControl() : base() { }
          public HeadLineControl(Article article) : base(article) { }

Definição da classe base

public abstract class ControlBase : Control
{
     protected Article article;

     protected ControlBase() { }
     protected ControlBase(Article article)
     {
          this.article = article;
     }

O articleControl é responsável por escrever para as partes individuais do artigo especificado pelos controles aninhados,

Meu problema é que, quando o articleControl é criado, as instâncias dos controles do servidor aninhadas são criadas pela estrutura .NET usando o construtor padrão definido para o sistema.web.ui.Control Classe EG:

namespace System.Web.UI
{

public class Control : IComponent, IDisposable, IParserAccessor, IUrlResolutionService, IDataBindingsAccessor, IControlBuilderAccessor, IControlDesignerAccessor, IExpressionsAccessor
    {
        // Summary:
        //     Initializes a new instance of the System.Web.UI.Control class.
        public Control();

Preciso ligar ou substituir o comportamento padrão do .NET para chamar meu construtor de classe de controle de controle no início do contrato definido .NET definido. Então, em suma, se uma nova instância de headlineControl for criada, ele precisa ser criado pelo ControlBase(Article article) consutor.

Isso é possível e, se possível, como faço isso?

Foi útil?

Solução

Enquanto isso, eu fiz isso como uma solução alternativa, mas deve haver uma maneira melhor?

[PersistenceMode(PersistenceMode.InnerProperty)]
 public HeadLineControl HeadLine 
 {
      get { return null; }
      set 
      {
          this.Controls.Add(new HeadLineControl(articlePage.Article)();
      }
 }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top