0

を含むマスターページがありますDropDownList。マスターにリストをバインドする関数があり、正常に動作します。

私の問題は、上記のマスターページの子ではないフォームからそのマスターページ関数をどのように呼び出すかです。

4

7 に答える 7

2

こちらの記事をご覧ください。

これは、ASP.NET 2.0 の新しいコンパイル モデルから得られる優れた機能です。次のように、マスター ページのコード ビハインド ファイルにカスタム プロパティを追加するとします。

partial class otcMaster : System.Web.UI.MasterPage
{

public string FooterText {
    get { return Footer.Text; }
    set { Footer.Text = value; }
}

 }

MasterPage 参照を返す継承された Master プロパティを使用して、Web フォームのマスター ページにアクセスできます。ただし、otcMasterPage で定義されたプロパティにアクセスするには、キャストを使用する必要があると考えるかもしれません。

((otcMaster)Master).FooterText == "foo"

フレームワークや静的型付け言語を使用する場合、派生型へのキャストは生活の一部に過ぎませんが、もっと良い方法があります。ASPX で @ MasterType ディレクティブを使用します。

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

ASP.NET がページを codegens すると、部分的なクラス定義内に次のコードが挿入されます。Shadows キーワードに注意してください (これは、セミコロン ランドの新しいキーワードです [ええ、私は別の言語を試しています])。

public new otc Master {
get { return (otcMaster)base.Master; }
}

その結果、厳密に型指定されたマスター ページが作成されます。キャストは必要ありません。Master.FooterText プロパティに直接移動できます。これを行う別の方法は、@MasterType ディレクティブで TypeName を指定することです。

于 2012-05-21T10:25:52.603 に答える
1

で public メソッドを提供してMasterPageから、ContentPage のMasterプロパティを適切な型にキャストする必要があります。

public void DataBindDropDowns()
{
    // ...
}

次に、次の方法で ContentPages から呼び出すことができます (マスターページのタイプが呼び出されると仮定しますSiteMaster:

((SiteMaster)this.Page.Master).DataBindDropDowns();

編集

...上記のマスターページの子ではない

ContentPageそれはあのマスターのものではないということだと思いますよね?次に、次の場合を除き、マスターへの参照を取得することはできません。

  • マスターのメソッドは静的です。マスターにコントロールをバインドしたいので、このユースケースでは不可能です
  • マスターがそのタイプのページへの参照がありますが、現在はこのマスターを使用しない別のページであるため、これも不可能ですHTTP-Handler

マスター ページは実際には の子であり、ContentPageそれにマージされることに注意してください。存在しないオブジェクトへの参照を取得することはできませ!

MSDNから:

マスター ページはコンテンツ ページの一部になることに注意してください。実際には、マスター ページはユーザー コントロールとほぼ同じように機能します。つまり、コンテンツ ページの子として、またそのページ内のコンテナーとして機能します。

于 2012-05-21T10:25:58.830 に答える
0

非常に頻繁に作成する場合は、BasePageから派生した を作成しSystem.Web.UI.Page、それをフォームのベージ ページとして使用できます。

そこで、マスター ページのタイプのプロパティを追加して、マスター ページのすべてのパブリック メンバーにアクセスできるようにします。

マスター ページ クラスがSite1の場合、BasePage.

public class BasePage : System.Web.UI.Page
{
    protected Site1 Site1Master
    {
        get { return Master as Site1; }
    }
}

次に、マスターページのメソッドにアクセスする必要があるページで、次のように置き換えます。

    public partial class DefaultPage : System.Web.UI.Page

    public partial class DefaultPage : BasePage

次に、プロパティ Site1Master をページで使用できるようにし、次のようにそのパブリック メンバーを使用できます。

  Site1Master.MyBindingFunction(...);

BasePage に他の必要な機能を追加することもできます。

注: ページでプロパティが null でないことを確認したい場合は、次のSite1ように、ページにマスターがあるかどうかを確認するチェックを追加できます。

    protected Site1 Site1Master
    {
        get 
        { 
           if (!(Master is Site1))
              throw new Exception("This page doesn's have Site1 as master page");
           return Master as Site1; 
        }
    }
于 2012-05-21T10:37:04.487 に答える
0

マスター ページのメンバーにアクセスするために、ページ コンテンツで公開されているマスター プロパティがあります。最初に @ MasterType ディレクティブを指定する必要があります:

<%@ Page  masterPageFile="~/MasterPage.master"%>
<%@ MasterType  virtualPath="~/MasterPage.master"%>

次に、マスターページでパブリック関数を作成し、コンテンツページで呼び出すだけです

Master.MethodNameInMaster()
于 2012-05-21T10:38:01.250 に答える
0

より良い設計のために、EventAggregator パターンを使用します。カスタム イベントを作成し、マスター ページで処理します。

于 2012-05-21T11:48:26.507 に答える
0

これをページ コードに挿入します (ここで、MyMasterPage はマスター ページ オブジェクトです)。

MyMasterPage masterPage = (MyMasterPage) this.Master;

masterPage.MyBindDropDownListFunction(); // Replace with your public function name
于 2012-05-21T10:23:51.543 に答える
0

MasterPage プロパティを参照し、マスター ページ タイプにキャストして、メソッドを呼び出す必要があります。

((MyMasterPage)this.Master).MyBindingFunction();
于 2012-05-21T10:24:02.427 に答える