【问题标题】:ASP.Net Calling Site.Master method from web page not working来自网页的 ASP.Net 调用 Site.Master 方法不起作用
【发布时间】:2013-01-03 23:15:10
【问题描述】:

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

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

程序是(抄自文章):

确保页面可以访问该函数(即声明 public),并在 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.”的方法中时,我看不到我的方法。

【问题讨论】:

  • 是不是你的虚拟路径缺少波浪号~字符那么简单,所以应该是VirtualPath="~/SiteMasters/Site.Master"
  • 不,我试过了。我对 Microsoft 自动插入的 ~ 的问题是它的意思是相对的,这并不总是正确的。我遇到了问题,其解决方案是删除 ~ 并仅引用域的根目录。

标签: asp.net visual-studio-2012 master-pages


【解决方案1】:

您的页面继承自 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()
    {
    }
}

【讨论】:

  • 微软好像有个bug。它一定是在重建解决方案以及关闭 VS2012 并重新启动它解决了问题。你确实教育了我。谢谢你。但是,您编写的代码不会构建。请参阅下面的答案。
【解决方案2】:

之前的答案确实教育了我,但是我相信解决方案是重新启动 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 文件中的定义。可能是缺少定义,后来又被添加了,当我重建或保存时,我以前做过,或者其他什么。

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

【讨论】:

  • 必须是 VS2012 的东西。以前您必须手动投射这些对象。
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
相关资源
最近更新 更多