• ベストアンサー
  • 困ってます

マスターページからコンテンツページのメソッドを実行したい

  • 質問No.5827497
  • 閲覧数3098
  • ありがとう数4
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 80% (17/21)

お世話になります。
マスターページからコンテンツページのメソッドを実行したいです。
よろしくおねがいします。


**********************************
マスタページ:Site1
**********************************
[Site1.Master]
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="Site1" %>

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>


[Site1.Master.cs]
public partial class Site1 : System.Web.UI.MasterPage
{

ここで、コンテンツページのメソッドを実行

}


**********************************
コンテンツページ:WebForm1
**********************************
[WebForm1.aspx]
<%@ Page Language="C#" MasterPageFile="Site1.Master" Codebehind="WebForm1.aspx.cs" Inherits="WebForm1" %>

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
</asp:Content>


[WebForm1.aspx.cs]
public partial class WebForm1 : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {
 }

 //このメソッドをマスターページで実行したい
 public string メソッド()
 {
  return "XXXXXXX";
 }

}

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 69% (477/687)

----------
※単純解答
----------
public partial class Site1 : System.Web.UI.MasterPage
{
  protected void Page_Load(object sender, EventArgs e)
  {
    TextBox l_txt = new TextBox();
    l_txt.Text = this.呼出();
    this.Page.Form.Controls.Add(l_txt);
  }

  private string 呼出()
  {
    WebForm1 l_frm = (WebForm1)this.Page;
    return l_frm.メソッド();
  }
}


----------
※別解
----------
マスタを利用するってことは、埋め込むフォームが変わるはずです。

埋め込まれるフォームはベースクラスを利用した作りにして、マスタからのメソッド呼び出しはベースクラスのメソッドを呼ぶと、スマートな作りになると思います。

[childpage.cs]をプロジェクトに新規追加
public class childpage : System.Web.UI.Page
{
  //継承可能なメソッド1
  public virtual string メソッド()
  {
    return "未設定";
  }

  //継承可能なメソッド2
  public virtual string メソッド2()
  {
    return "親です";
  }
}

[WebForm1.aspx.cs]を改造
public partial class WebForm1 : childpage
{
  // このメソッドを省略すると、ベースのメソッドを実行する
  public override string メソッド()
  {
    return "XXXXXXX";
  }

  // おまけ
  public override string メソッド2()
  {
    //親のメソッド2との合わせ技
    return String.Format("親を呼ぶと【{0}】が返る", base.メソッド2());
  }
}

[Site1.Master.cs]も改造 (単純解答を改造)
private string 呼出()
{
  childpage l_frm = (childpage)this.Page;
  return l_frm.メソッド();
}
お礼コメント
kasukon

お礼率 80% (17/21)

私が尋ねた質問は『※単純解答』で解決することが出来ました。
が、『※別解』を見て目からうろこの状態です。
まさに、私がやらなければいけない解答がここに書かれていました。
1050YEN様ほんとうにありがとうございました。
解決の糸口がはっきりと見えました。
投稿日時:2010/04/16 16:59
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ