1

いくつかの Web ページで、マスター ファイルを使用する Web ページ コール ビハインド コードからマスター ファイルで定義されたパブリック メソッドにインターフェイスする方法を見てきました。

(Visual Studio 2012 で ASP.Net 4.0 を使用しています。)

手順は次のとおりです(記事からコピー):

関数がページからアクセス可能であること (つまり、パブリックに宣言されていること) を確認し、ContentPage で MasterType 宣言を使用します。

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

ページで、Page.Master.MyFunction() を使用して関数にアクセスします。*注: 関数にアクセスする前に、保存してビルドする必要があります。

問題は、メソッドが表示されないことです。ここに私が持っているものがあります:

Web ページ (/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

あなたのページはSystem.Web.UI.Pageから継承しています。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 に答える
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 ファイルを確認することは考えていませんでした。おそらく、定義が不足していて、後で再構築したり、以前に行った保存を行ったりしたときに追加された可能性があります。

追加が存在しない場合は、その構成を使用して手動で追加できるため、追加を知っていると物事が簡単になります。

于 2013-01-04T17:59:12.680 に答える