【问题标题】:How to use a method in a Master Page from a Content Page如何从内容页使用母版页中的方法
【发布时间】:2013-01-15 03:53:13
【问题描述】:

我正在用 C# 编写一个 ASP.NET 4 应用程序。我有一个母版页,里面有以下方法:

public void DisplayMessage(string input)
{
   Label myMessageDisplayer = (Label)FindControl("uxMessageDisplayer");
   myMessageDisplayer.Text = input;
}

我可以从内容页面调用此方法吗?
目前,我在内容页面中使用此代码:

Master.DisplayMessage("Item has been inserted.");

我收到此错误:

“System.Web.UI.MasterPage”不包含“DisplayMessage”的定义,并且找不到接受“System.Web.UI.MasterPage”类型的第一个参数的扩展方法“DisplayMessage”(您是否缺少using 指令还是程序集引用?)

任何帮助将不胜感激。

【问题讨论】:

  • 你用的是哪个VS版本?

标签: c# asp.net master-pages


【解决方案1】:

您可以使用转换来获取母版页类型,正如其他人所展示的那样,或者您可以将MasterType 指令添加到您的页面标记中(在顶部,标准<%@ Page %> 指令所在的位置):

<%@ MasterType TypeName="YourNamespace.YourMasterPageType" %>

然后在您的页面代码中,您可以拥有示例中的内容:

Master.DisplayMessage("Item has been inserted.");

MasterType 指令适用于 .NET 2 以上版本。

【讨论】:

  • "从 .NET 2 开始可以使用 MasterType 指令。"母版页也是如此。 :-)
【解决方案2】:

您需要将Master 转换为实际的母版页类型

// MyMasterPage is the type of your masterpage
((MyMasterPage)Master).DisplayMessage("Item has been inserted.");

您还可以在内容页面的顶部添加MasterType directive 来实现相同的目的:

<%@ MasterType VirtualPath="~/MyMasterPage.master" %>

那么你可以使用:

Master.DisplayMessage('Item has been inserted.');

【讨论】:

  • 嗨,我可以在内容页或母版页中插入 吗?谢谢
  • 那是放在内容页里的。
  • @GlbboK - 将其添加到您的内容页面。然后你可以使用Master.DisplayMessage('...');
  • 我尝试 Graham,但我再次收到错误错误 1 ​​名称空间“WebProject.Web.Cms.AdminCms”中不存在类型或名称空间名称“MasterPages”(您是否缺少程序集引用?)...我做错了什么???
  • 我正在使用这个代码:
【解决方案3】:

我做了/试试这个:

我的控制 (MenuEsquerdo.ascx)

<%--<%@ MasterType VirtualPath="~/Site.Master" %>--%>
<%--<%@  MasterPageFile="~/Site.Master" %>--%>
<%--<%@ MasterType TypeName="Delivery.SiteMaster" %>--%>
<%--<%@ MasterType VirtualPath="~/Site.Master" %>--%>
<%@ MasterType TypeName="Delivery.SiteMaster" %>

我的设计器控件 (MenuEsquerdo.ascx.designer.cs)

public new Delivery.SiteMaster Master {
            get {
                return ((Delivery.SiteMaster)(base.Master)); // 'System.Web.UI.UserControl' does not contain a definition for 'Master'
            }
        }

还有我背后的代码 (MenuEsquerdo.ascx.cs)

RepeaterListaMenuEsquerdoCtr.DataSource = this.Master.ClassMercadorias.Take(20);
RepeaterListaMenuEsquerdoCtr.DataBind();

知道,我该如何解决:“System.Web.UI.UserControl”不包含“Master”的定义?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多