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

时间:2021-07-23 13:49:38

标签: c# asp.net webforms

我希望在我的母版页上执行我的代码中的代码,并在 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 = "$8.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>

实现这一目标的最快/最有效方法是什么?此外,我尝试使用在 StackOverflow 上看到的替代方法,使用 getset 但是我无法让它工作。对 C# 相当陌生,所以我很抱歉。

2 个答案:

答案 0 :(得分:2)

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

方法一:注册主类型

网络表单:

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

背后的代码:

Page.Master.getPlanCost();

方法二:铸造主属性

背后的代码:

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

答案 1 :(得分:0)

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

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

<%=Utilities.getPlanCost()%>

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

相关问题