从单个类继承的母版页和内容页

时间:2009-07-01 17:23:55

标签: asp.net inheritance master-pages

我正在尝试创建一个通用类,其中所有的ASP.Net页面都继承自此,因此我可以跨多个页面共享函数。

为此,我将创建一个继承自System.Web.UI.Page的新类(内容页面需要继承此内容),然后我的内容页面将继承新创建的类。

我的问题是Masterpage继承自System.Web.UI.Masterpage。

如何设置我的项目以便内容页面和母版页以及使用普通类的功能?

请不要犹豫,问我是否不清楚!

谢谢!

电子

4 个答案:

答案 0 :(得分:2)

首先,不确定为什么要这样做。通过它们的功能,Master Pages应该主要具有您的Pages不应该关注的功能,反之亦然。如果你只需要一些不依赖页面的常用功能,你可以创建一个静态类(很像Math)或者你可以在MasterPage和Page自定义基类中实现的某种辅助类。

但你唯一真正的选择是创建两个自定义基类。一个继承MasterPage而另一个继承自Page。两者都需要实现您创建的接口ICommon。然后创建另一个静态类,您可以将所有函数代理到。

令人讨厌的解决方案,但它是我唯一能想到的。

修改

这是一个更好的解决方案

public class Helper
{
   public static int getUserID(...)
   {
      // ... Code to get User ID
   }
}

在您的主页和页面中使用

int UserID = Helper.getUserID(...);

答案 1 :(得分:0)

我认为你不能这样做,MasterPage继承UserControl,Page继承TemplateControl。就像斯宾塞说的那样,我只想创建一个Helper / Utility类。

答案 2 :(得分:0)

我知道现在为时已晚,但只想分享一些人可能会遇到同样的问题。 这是使用扩展函数的示例代码:

public static void Commonfunction(this TemplateControl ctl)
{
      // Your Code here
}

将此功能称为

this.Commonfunction();

在任何页面或母版页中。

答案 3 :(得分:0)

虽然这个问题已经有5年了,但我想为未来的读者分享另一种选择。

根据您的解释,我认为您所谓的MasterPage就像一个框架,例如在屏幕的一侧加载内容页面。

如果我是对的,您可以使用您的功能创建一个BaseMasterPage课程,然后为您的内容页面创建一个MasterPage(您也可以使用它来放置当前的一些代码)页)。显然,下一步是让您当前的MasterPage,以及ContentMasterPage继承此BaseMasterPage

因此,您最终可以在框架页面和内容页面中使用LoggedUser属性。