ASPX访问母版页功能

时间:2012-03-30 18:20:35

标签: c# asp.net

我正在尝试从另一个ASPX页面访问放置在母版页代码隐藏中的函数,如下所示。

Main.master.cs:

public partial class Main : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
      ...
    }

    public static bool test()
    {
        return true;
    }
}

Product.aspx:

<%@ Page Language="C#" MasterPageFile="~/Main.master" EnableEventValidation="false"
AutoEventWireup="true" ValidateRequest="false" CodeFile="Product.aspx.cs" Inherits="Common_Product" Title="Product" %>
...
<asp:Label id="test123" runat="server" />

Product.aspx.cs:

using SiteABC.Accelerate;
public partial class Common_Product : SiteABC.Accelerate.SerializePageViewState   
{
    private void Page_Load(Object sender, EventArgs e)
    {
        Main cm = (Main)Page.Master; 
        test123.Text = "yo | " + cm.test();
    }
}

这会导致编译器错误:

Compiler Error Message: CS0176: Member 'Main.test()' cannot be accessed with an instance reference; qualify it with a type name instead

这种情况有什么问题?

谢谢。

4 个答案:

答案 0 :(得分:2)

试试这个:

public partial class Main : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
    ...

    }

    public bool test()
    {
        return true;
    }
}

答案 1 :(得分:0)

错误说得很清楚,你无法使用实例引用访问静态方法。 你需要这样做:

test123.Text = "yo | " + Main.test();

但是,我不确定将这样的方法放到您的MasterPage中是否是最佳做法...您应该创建一个新类并使用它。

答案 2 :(得分:0)

更改您的测试,使其成为属性

public partial class Main : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
      ...
    }

    public Property bool test()
    {
        get { return true; }
    }
}

答案 3 :(得分:0)

您无法使用实例对象访问静态方法。

应该是

Main.test();