Frage

Ich habe eine Serversteuerung, die verschachtelte Serversteuerung enthält.

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

Code:

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

Verschachtelte Kontrolldefinition (gilt für alle verschachtelten Kontrollen):

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

Basisklassendefinition

public abstract class ControlBase : Control
{
     protected Article article;

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

Das ArticleControl ist für das Schreiben für die einzelnen Teile des Artikels verantwortlich, die von den verschachtelten Kontrollen angegeben sind.

Mein Problem ist, dass beim Erstellen der ArticleControl -Instanzen der verschachtelten Serversteuerungen vom .NET -Framework unter Verwendung des für das System definierten Standardkonstruktors erstellt werden.

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

Ich muss das Standardverhalten von .NET anrufen oder überschreiben, um meinen Konstruktor der Steuerbasisklasse am Standpunkt des Standard -.NET -Contructors aufzurufen. Kurz gesagt, wenn eine neue Instanz von HeadlineControl erstellt wird, muss sie von der erstellt werden ControlBase(Article article) Konstruktor.

Ist das möglich und wenn möglich, wie leisten ich das?

War es hilfreich?

Lösung

Ich habe das in der Zwischenzeit als Problemumgehung gemacht, aber es muss einen besseren Weg geben?

[PersistenceMode(PersistenceMode.InnerProperty)]
 public HeadLineControl HeadLine 
 {
      get { return null; }
      set 
      {
          this.Controls.Add(new HeadLineControl(articlePage.Article)();
      }
 }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top