Вопрос

У меня есть серверный элемент управления, который содержит вложенные серверные элементы управления,

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

Код:

[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;
    }
}

Определение вложенного элемента управления (применяется ко всем вложенным элементам управления):

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

Определение базового класса

public abstract class ControlBase : Control
{
     protected Article article;

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

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

Моя проблема заключается в том, что при создании Articlecontrol экземпляры вложенных серверных элементов управления создаются .NET framework с использованием конструктора по умолчанию, определенного для класса System.Web.Ui.Control, например:

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();

Мне нужно вызвать или переопределить поведение .Net по умолчанию, чтобы вызвать конструктор моего базового класса управления вместо конструктора по умолчанию .Определяемый сетью конструктор.Короче говоря, если создается новый экземпляр HeadLineControl, он должен быть создан ControlBase(Article article) конструктор.

Возможно ли это, и если возможно, то как мне этого добиться?

Это было полезно?

Решение

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

[PersistenceMode(PersistenceMode.InnerProperty)]
 public HeadLineControl HeadLine 
 {
      get { return null; }
      set 
      {
          this.Controls.Add(new HeadLineControl(articlePage.Article)();
      }
 }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top