質問: お世話になります。 マスターページからコンテンツページのメソッドを実行したいです。 よろしくおねがいします。 ********************************** マスタページ:Site1 ********************************** [Site1.Master] <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="Site1" %> [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" %> [WebForm1.aspx.cs] public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } //このメソッドをマスターページで実行したい public string メソッド() { return "XXXXXXX"; } }
回答: ---------- ※単純解答 ---------- 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.メソッド(); }