アプリ版:「スタンプのみでお礼する」機能のリリースについて

※こちらの派生です。
http://oshiete1.goo.ne.jp/qa5222698.html

マスターページに配置したボタンのクリックイベントを
コンテンツページ(?マスターページを使用するページ)で
拾うことは可能でしょうか?

もしくは、マスターページに配置したボタンのクリックイベントの処理を
コンテンツページで実装することは可能でしょうか?

ボタンの配置は同じだけれど、メソッドの中の処理は
コンテンツページ毎に分けたいのです。


例えばマスターページ「hoge」とコンテンツページ「moge」があったとすると
以下のような感じです…。

---------------------------------------------------------------------------
==============
hoge.Master
==============
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="hoge.master.cs" Inherits="xxx.hoge" %>

<asp:Content ID="Content3" ContentPlaceHolderID="FooterContentPlaceHolder" runat="server">
<asp:Button ID="btn" runat="server" Text="ぼたん" onclick="btn_Click" />
</asp:Content>

==============
hoge.Master.cs
==============
protected void btn_Click(object sender, EventArgs e)
{
// ここではなく
}

==============
moge.aspx
==============
<%@ Page Language="C#" MasterPageFile="~/hoge.Master" AutoEventWireup="true" CodeBehind="moge.aspx.cs" Inherits="xxx.moge" Title="もげ" %>

==============
moge.aspx.cs
==============
protected void btn_Click(object sender, EventArgs e)
{
// ここにボタンが押された際の処理を実装したい
}
---------------------------------------------------------------------------

よろしくお願い致します。

A 回答 (5件)

質問内容が間違っていると指摘しましたが、恐らく下記のようなことをやりたいんじゃないかと思い、推測で答えを書いてみました。


ご確認ください。

==============
hoge.Master
==============
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="hoge.master.cs" Inherits="MasterPage" %>

<asp:contentplaceholder id="FooterContentPlaceHolder" runat="server">
<%-- ここにaspxのコンテンツをaspxファイルで配置してもらう --%>
</asp:contentplaceholder>

<%-- MasterPage に配置したボタン--%>
<asp:Button ID="btn" runat="server" Text="ぼたん" />

==============
hoge.Master.cs
==============
public partial class MasterPage : System.Web.UI.MasterPage
{
  // aspx側に公開するボタンのクリックイベント
  public EventHandler btnClick_PageHandler;

  // MasterPage表示時
  protected void Page_Load(object sender, EventArgs e)
  {
    // aspx側で処理するボタンのクリックイベントが設定されていたら
    if (btnClick_PageHandler != null)
    {
      // aspx側で定義したボタンクリックイベントを設定する
      btn.Click += btnClick_PageHandler;
    }
  }
}

==============
moge.aspx
==============
<%@ Page Language="C#" MasterPageFile="~/hoge.Master" AutoEventWireup="true" CodeBehind="moge.aspx.cs" Inherits="xxx.moge" Title="もげ" %>

==============
moge.aspx.cs
==============
protected void Page_Init(object sender, EventArgs e)
{
  // MasterPageのインスタンスを取得する
  ASP.hoge_master m = (ASP.hoge_master)this.Master;

  // MasterPageにあるボタンにクリックイベントを付与する
  m.btnClick_PageHandler += new EventHandler(this.MasterPageButton_Click);
}

private void MasterPageButton_Click(object sender, EventArgs e)
{
  // ここにMasterPageで定義したボタンのクリックイベントを実装する
}

もし、質問したかった内容と回答内容が違うようであれば、もう一度、情報を整理してご質問頂けるとた有難いです。
宜しくお願いします。
    • good
    • 1

すみません、回答番号:No.4は上記URLに転記しました。


回答番号:No.4についての回答は、
大変お手数ですがこちらを参照頂く様お願いいたします。

参考URL:http://ap.atmarkit.co.jp/bbs/core/fdotnet/16690
    • good
    • 0

すみません、少し前の話なんですが便乗させて下さい。



 私もよく分からないので、ググってみたら
 こちらのページにたどり着きました。

 [aspnet]さんの回答を参考に
 【マスタページ側に、@MasterTypeディレクティブを追加、Name属性を書き、コードビハインドのクラス名で固める】
 方法が簡単でかつ汎用性があるなあ、と思って
 やってみよー!、と思ったのですが、
 「マスタページ」に
 「<@ MasterType Name="Hoge"@>」を追加したのですが、
 「属性 'Name' は要素 'MasterType' の有効な属性ではありません」
 エラーが発生し、追加できません。

 似たようなプロパティで「TypeName」があったので、
 <%@ MasterType TypeName="Hoge" %>としてみましたが、
 今度は「型 'hoge' を読み込めませんでした。」の
 エラーが発生してしまいます;;。

 [aspnet]さんの回答内容を実現できる方、いらっしゃいませんか?
 アホな私にやり方を教えて下さい…;;。

 いろいろググってると、「MasterType 」はコンテンツページ(~.aspx)に書くようなんですが…。
 これをマスタページに書くこともできるんですか?

以上です。便乗申し訳ありません。
    • good
    • 0

MasterPage上のオブジェクトを、コンテンツページから捕捉したい、ということですよね?


(コントロールイベントを拾ったり、プロパティに値をセットしたい……etc)
ならば、

【マスタページ側に、@Masterディレクティブを追加、ClassName属性を書き、これをコンテンツページから指定する】
<%Master ClassName="Hoge">としておき、コンテンツページから、
((ASP.Hoge)Master).btn
でコントロールが可視になります(エディタ上でIntelliSense効く)。

【マスタページ側に、@MasterTypeディレクティブを追加、Name属性を書き、コードビハインドのクラス名で固める】
<@ MasterType Name="Hoge">としておき、コンテンツページから、
Master.btn.なんたらかんから
でコントロールが可視になります。こちらの方法がオシャレ?
要するに、「オイラのMasterとしての型はHogeだ」と宣言するわけです。

コンテンツページがマスタページを参照するには、必ずMasterプロパティを使います。こいつはよくわからないのですが、動的にコンパイルされるマスタページをコンテンツページから見た型のようです。

Master.FindControl("xxx")とかで探す方法もありますが、インテリセンスが利かない泥臭いやりかたはスルーでしょう。
    • good
    • 0

hoge.Masterに、


<asp:Content ID="Content3" ContentPlaceHolderID="FooterContentPlaceHolder" runat="server">
<asp:Button ID="btn" runat="server" Text="ぼたん" onclick="btn_Click" />
</asp:Content>
という記述があるということは、さらなるMasterPageを参照させてますか?
質問内容を見る限り、moge.aspx の記述なのではないかと思いますが、間違いございませんか?

正しい情報を頂かないと正しい回答もできないと思うので、
申し訳ございませんが、もう一度、質問内容を整理して
頂けないかと思います。宜しくお願いします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています