【问题标题】:Accessing masterpage code behind code from a child pages .ASPX page从子页面 .ASPX 页面访问代码背后的母版页代码
【发布时间】:2021-09-30 15:29:14
【问题描述】:

我希望在我的 Masterpage 后面的代码中执行代码,并在 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# 相当陌生,所以我很抱歉。

【问题讨论】:

  • 您需要将getPlanCost() 代码移动到其他地方,这两个地方都可以使用。
  • 哪里像?肯定可以通过 .ASPX 页面访问 MasterPage?
  • 不,aspx 甚至不必知道它在母版页中。

标签: c# asp.net webforms


【解决方案1】:

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

方法一:注册主类型

网络表单:

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

代码背后:

Page.Master.getPlanCost();

方法二:铸造主属性

代码背后:

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

【讨论】:

    【解决方案2】:

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

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

    <%=Utilities.getPlanCost()%>
    

    我还要感谢 @Joel Coehoorn 的 cmets 让我走到了一半。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-18
      • 2010-11-25
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      相关资源
      最近更新 更多