1

我在几个网页上看到了如何从使用该主文件的代码后面的网页调用与主文件中定义的公共方法接口。

(我在 Visual Studio 2012 上使用 ASP.Net 4.0。)

程序是(从文章复制):

确保页面可以访问该函数(即声明为公共),并在 ContentPage 中使用 MasterType 声明:

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

在页面中,使用 Page.Master.MyFunction() 访问该函数。*注意:在能够访问该功能之前,您需要保存并构建。

问题是我没有看到方法。这是我所拥有的:

网页(存储在 /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”的方法中时,我看不到我的方法。

4

2 回答 2

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 确实通过“Master.”提供了对 MyNamespace.Site 的访问权限,这正是我所需要的。

当我遇到问题时,我没想过要检查 .aspx.designer.cs 文件中的定义。可能缺少定义并在以后添加时,当我重建或进行保存时,我以前做过,或者其他。

知道添加确实可以简化事情,因为如果使用该构造不存在,我可以手动添加它。

于 2013-01-04T17:59:12.680 回答
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()
    {
    }
}
于 2013-01-04T00:10:19.657 回答