我正在用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指令或程序集引用?)
任何帮助将不胜感激。
答案 0 :(得分:7)
您可以像其他人一样使用强制转换来获取您的母版页类型,或者您可以将MasterType
指令添加到页面标记中(在顶部,标准<%@ Page %>
指令所在的位置) :
<%@ MasterType TypeName="YourNamespace.YourMasterPageType" %>
然后在您的页面代码中,您可以拥有示例中的内容:
Master.DisplayMessage("Item has been inserted.");
可以从.NET 2向上提供MasterType
指令。
答案 1 :(得分:6)
您需要将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.');
答案 2 :(得分:0)
我做了/试试这个:
我的控件(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'的定义?