从子页面 .ASPX 页面访问代码背后的母版代码

Accessing masterpage code behind code from a child pages .ASPX page

我想在我的母版页后面的代码中执行代码,并在 Default.aspx 等子页面的 .aspx 页面上使用它,而不必通过 Default.aspx.cs 调用它页。

这是我尝试像这样访问它<% MasterPage.getPlanCost() %>,但是,这不起作用。因为 getPlanCost()

没有“定义”

后面的母版页代码:

public string getPlanCost()
{
    var country = getCountry();
    string gbp = "£5.99";
    string euro = "€6.99";
    string usd = ".99";
    var currencyCost = usd;

    if (country == "United Kingdom") // gbp
    {
        currencyCost = gbp;
    }
    else if (country == "United States" || country == "Canada" || country == "Australia" || country == "New Zealand") // usd
    {
        currencyCost = usd;
    }
    else // euro
    {
        currencyCost = euro;
    }

    return currencyCost;
}

Default.aspx 页数:

<p class="text-center under-title text-muted"><%=MasterPage.getPlanCost() %> Cancel Anytime.</p>

实现此目标最快/最有效的方法是什么?此外,我尝试使用在 Whosebug 上看到的替代方法,使用 getset 但是我无法使它正常工作。对 C# 还很陌生,所以我深表歉意。

对于任何想知道的人,我创建了一个名为 Utilities.cs

的 class

然后直接从我的 Default.aspx 页面调用它。

<%=Utilities.getPlanCost()%>

我还要感谢@Joel Coehoorn 的评论,他的评论让我走到了一半。

虽然您找到了解决方法,但可以从子 Web 表单访问母版页方法,这在希望您的子页面以某种方式影响母版页的情况下很有用。您可以通过 Page.Master 属性 执行此操作,但您首先必须注册或转换类型。

方法一:注册Master类型

网络表单:

<%@ Page Language="C#" MasterPageFile="~/Example.Master" ... %>
<%@ MasterType VirtualPath="~/Example.Master" %>

隐藏代码:

Page.Master.getPlanCost();

方法二:铸造大师属性

隐藏代码:

((Example)Page.Master).getPlanCost();