为Asp中继器隐藏FooterTemplate

时间:2011-03-15 09:09:05

标签: asp.net controls

我需要建议!所以我有一个自定义转发器,我在自定义控件中编写页脚,这里是代码:

 [ParseChildren(true)]
[PersistenceMode(PersistenceMode.InnerProperty)]
[DefaultProperty("Text")]
[ToolboxData("<{0}:CustomRepeater runat=server></{0}:CustomRepeater>")]
public class CustomRepeater : Repeater
{
    [PersistenceMode(PersistenceMode.InnerDefaultProperty),
     TemplateContainer(typeof(GuessFooterTemplate))]                       
    private ITemplate FooterTemp {get; set;}

    protected override void InitializeItem(RepeaterItem item)
    {
        base.InitializeItem(item);
        FooterTemp = new GFooterTemplate();
        this.FooterTemplate = FooterTemp;                                     
    }


    //Here I try to hide the footer template
    [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
    public override ITemplate FooterTemplate
    {
        get
        {
            return base.FooterTemplate;
        }
        set
        {
            base.FooterTemplate = value;
        }
    }


}

internal class GFooterTemplate : ITemplate
{
    PlaceHolder ph = new PlaceHolder();
    public void InstantiateIn(Control Container)
    {
        ph.Controls.Add(new LiteralControl("Test for Footertemplate"));
        Container.Controls.Add(ph);
    }

}

因此,当页脚以编程方式编写时,我想为使用自定义转发器的人隐藏FooterTemplate。我在想[PersistenceMode(PersistenceMode.InnerDefaultProperty)]会这样做,但显然不是。有人有想法吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您不希望CustomRepeater的用户能够修改FooterTemplate ...

我看到了两种可能的解决方案:

使用您的媒体资源上的new修饰符完全重新定义它:

private new ITemplate FooterTemplate  
{  
  get { return base.FooterTemplate; }  
  set { base.FooterTemplate = value; }  
}

或者修改setter什么都不做,从而阻止修改:

public override ITemplate FooterTemplate
{
  get
  {
    return base.FooterTemplate;
  }
  set
  {
    /* base.FooterTemplate = value; */
  }
}

HTH