题
我有一个包含嵌套服务器控件的服务器控件,
<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框架使用为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的默认行为来调用我的Control基类构造函数而不是默认的.Net定义的构造函数。简而言之,如果创建了一个新的HeadLineControl实例,它需要由 ControlBase(文章文章)
构造函数创建。
这是否可行,如果可能,我该如何做到这一点?
解决方案
我同时做了这个解决方法,但必须有更好的方法吗?
[PersistenceMode(PersistenceMode.InnerProperty)]
public HeadLineControl HeadLine
{
get { return null; }
set
{
this.Controls.Add(new HeadLineControl(articlePage.Article)();
}
}
不隶属于 StackOverflow