我在几个网页上看到如何通过使用该主文件的代码后面的网页调用来连接主文件中定义的公共方法。
(我在Visual Studio 2012上使用ASP.Net 4.0。)
程序是(从文章中复制):
确保页面可以访问该功能(即声明 public),并在ContentPage中使用MasterType声明:
<%@ Page .... %> <%@ MasterType VirtualPath="~/masterpage.master" %>
在页面中,使用Page.Master.MyFunction()来访问该功能。 *注意:在能够访问该功能之前,您需要保存&amp;建立。
问题是我没有看到这个方法。这就是我所拥有的:
网页(存储在/ MyFolder中,所以/ MyFolder中):
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Logout.aspx.cs" Inherits="BvCorpMain.Candidates.Logout" %>
<%@ MasterType VirtualPath="/SiteMasters/Site.Master" %>
Site.Master CS文件(存储在/ SiteMasters文件夹中):
public void UpdateUserBlocksToCookie()
{
}
当我进入退出页面后面的代码和我输入“Page.Master。”的方法时,我看不到我的方法。
答案 0 :(得分:0)
您的页面继承自System.Web.UI.Page,它只知道其主页的类型为System.Web.UI.MasterPage。如果要对MasterPage的子类进行修改,则需要将Page.Master属性强制转换为子类。
public class MyPage : System.Web.UI.Page
{
public new MyMaster Master { get { return base.Master as MyMaster; } }
public void Page_Load(object sender, EventArgs e)
{
Master.MyMasterPageFunction();
}
}
public class MyMaster : System.Web.UI.MasterPage
{
public void MyMasterPageFunction()
{
}
}
答案 1 :(得分:0)
之前的回答确实教育了我,但我相信解决方案是重启VS2012,也许清理解决方案并重建并没有受到伤害。无论哪种方式。
Microsoft将以下代码自动添加到.aspx.designer.cs文件中。
/// <summary>
/// Master property.
/// </summary>
/// <remarks>
/// Auto-generated property.
/// </remarks>
public new MyNamespace.Site Master {
get {
return ((BvCorpMain.Site)(base.Master));
}
之前的答案与此定义相冲突。此外,MyMaster的上一个答案虽然授予访问权限,但不会(至少自动)提供所需的表单信息。我检查了。使用现有的主文件是最干净的。
master.cs文件的定义是:
namespace MyNamespace
{
public partial class Site : System.Web.UI.MasterPage
正如您所看到的,Microsoft确实允许访问MyNamespace.Site,这就是我需要的“Master”。
当我遇到问题时,我没想过检查.aspx.designer.cs文件中的那个定义。可能这个定义是缺乏的,并且在我重建或进行了一次保存之后得到了补充,这是我以前做过的,或者其他什么。
知道添加确实简化了事情,因为如果使用该构造不存在,我可以手动添加。