سؤال

لديّ عنصر تحكم في الخادم يحتوي على عناصر تحكم خادم متداخل ،

<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 Class على سبيل المثال:

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 للاتصال بمنشئ فئة قاعدة التحكم الخاصة بي بدعود من المساهمين المحدد .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