在asp.net的内容页面中设置母版页属性的最佳方法?

时间:2010-09-01 17:58:51

标签: asp.net

有多种方法可以从母版页

设置内容页面的标题
  1. by findcontrol
  2. 通过在母版页中创建属性并在内容页面中设置值
  3. 由于这两种方法都需要创建母版页的对象,因为它很少 myMasterPage myMaster = (myMasterPage)this.Master;

    所以我通过创建一个类来尝试它并且它起作用了 -

    public class clsmaster
    {
        public static clsmaster objmaster = new clsmaster();
        public strtitle {get;set;}
    }
    

    现在我只需要访问这个静态对象并在内容页面和主页面中设置属性我只需要控件来获取此类的值(clsmaster)。

    我想知道哪一个是更好的方法,为什么有描述?

1 个答案:

答案 0 :(得分:1)

我通常建议创建一种类型的BasePage类,它封装了你想要通过所有页面的行为,假设这些对象总是拥有相同的母版页,如果你需要其他设置,那么你可以根据需要创建其他对象

从那里你可以创建一些属性或方法,以允许BasePage对象以一种非常容易编码的方式访问母版页或其相关属性,例如this.Title =“MyTitle”

您可以更好地在BasePage类上创建一些虚拟方法,然后根据需要在物理页面上覆盖,根据需要设置标题等,而无需直接获取主页面对象(是的,是讨厌和丑陋)。这可能看起来像这样。标题= GetTitle(); (GetTitle是BasePage上的一个虚方法,在子页面中根据您要为其设置标题的页面的需要进行覆盖。)

这可以很好地利用继承,并且可以让您轻松地为所有页面添加功能,这可能对您的操作有点过分,但我从来没有发现这种架构过于简单的情况,它只是真的有效好。我个人觉得这个设计比使用FindControl()更好,当控件ID发生变化时往往容易出错。

  1. FindControl()很糟糕,因为如果控件ID改变了,那么你可能会忘记在FindControl引用中更新它们,现在它会在下次执行时中断,我会远离静态的东西,比如如果可能出于这个原因,这是一个便宜,快速但容易出错的解决方案。

  2. 直接访问母版页本身并不坏,我不能忍受这样的事情:

    myMasterPage myMaster =(myMasterPage)this.Master

  3. 变老,比它需要的更难,至少将它包装在一个访问者属性中;)

    我更喜欢以下内容:

    Title = "My Title"; // Property
    

    Title = GetTitle(); // Virtual method