2013-01-03 50 views
1

我在幾個網頁上看到了如何從使用該主文件的代碼後面的網頁調用的主頁文件中定義的公共方法連接到公共方法。ASP.Net呼叫Site.Master方法從網頁不工作

(我使用ASP.Net 4.0的Visual Studio 2012)

的過程(從文章複製):

確保功能是將網頁訪問(即宣告 公開),並使用在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。」的方法中,我看不到我的方法。

+0

難道你的虛擬路徑缺少tildé'〜'字符,所以它應該是'VirtualPath =「〜/ SiteMasters/Site.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() 
    { 
    } 
} 
+0

看來,微軟有一個錯誤。它必須一直重建解決方案,並關閉VS2012並重新啓動它解決了問題。你確實教育了我。謝謝。但是,您編寫的代碼不會生成。請參閱下面的答案。 –

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 

正如你所看到的,微軟便從訪問MyNamespace.Site,這正是我需要的,與「主人」。

當我遇到問題時,我沒有想到檢查.aspx.designer.cs文件的定義。可能這個定義是缺乏的,後來又增加了,無論是我重建還是儲蓄,我之前做過的,或者其他什麼。

知道添加確實可以簡化事情,因爲我可以手動添加,如果它不存在使用該構造。

+0

必須是VS2012的東西。以前,您必須手動投射這些對象。 –