ضوابط الخادم المتداخلة
-
06-07-2019 - |
سؤال
لديّ عنصر تحكم في الخادم يحتوي على عناصر تحكم خادم متداخل ،
<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)();
}
}