我有一个包含嵌套服务器控件的服务器控件,

<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)();
      }
 }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top