
※こちらの派生です。
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)
{
// ここにボタンが押された際の処理を実装したい
}
---------------------------------------------------------------------------
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
質問内容が間違っていると指摘しましたが、恐らく下記のようなことをやりたいんじゃないかと思い、推測で答えを書いてみました。
ご確認ください。
==============
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で定義したボタンのクリックイベントを実装する
}
もし、質問したかった内容と回答内容が違うようであれば、もう一度、情報を整理してご質問頂けるとた有難いです。
宜しくお願いします。
No.5
- 回答日時:
すみません、回答番号:No.4は上記URLに転記しました。
回答番号:No.4についての回答は、
大変お手数ですがこちらを参照頂く様お願いいたします。
参考URL:http://ap.atmarkit.co.jp/bbs/core/fdotnet/16690
No.4
- 回答日時:
すみません、少し前の話なんですが便乗させて下さい。
私もよく分からないので、ググってみたら
こちらのページにたどり着きました。
[aspnet]さんの回答を参考に
【マスタページ側に、@MasterTypeディレクティブを追加、Name属性を書き、コードビハインドのクラス名で固める】
方法が簡単でかつ汎用性があるなあ、と思って
やってみよー!、と思ったのですが、
「マスタページ」に
「<@ MasterType Name="Hoge"@>」を追加したのですが、
「属性 'Name' は要素 'MasterType' の有効な属性ではありません」
エラーが発生し、追加できません。
似たようなプロパティで「TypeName」があったので、
<%@ MasterType TypeName="Hoge" %>としてみましたが、
今度は「型 'hoge' を読み込めませんでした。」の
エラーが発生してしまいます;;。
[aspnet]さんの回答内容を実現できる方、いらっしゃいませんか?
アホな私にやり方を教えて下さい…;;。
いろいろググってると、「MasterType 」はコンテンツページ(~.aspx)に書くようなんですが…。
これをマスタページに書くこともできるんですか?
以上です。便乗申し訳ありません。
No.3
- 回答日時:
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")とかで探す方法もありますが、インテリセンスが利かない泥臭いやりかたはスルーでしょう。
No.1
- 回答日時:
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 の記述なのではないかと思いますが、間違いございませんか?
正しい情報を頂かないと正しい回答もできないと思うので、
申し訳ございませんが、もう一度、質問内容を整理して
頂けないかと思います。宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポストバック(__doPostback)へ...
-
C#でドラッグ&ドロップが機能し...
-
ポストバック時の画面スクロー...
-
【ASP.NET】マスターページに配...
-
getParameterで値が取得できず...
-
PageLoadの後にJavascript実行...
-
c# 文字列の最後から1文字削除...
-
VBAで一時中断したプログラムの...
-
戻ると、記入フォームの内容が...
-
ページングが大量発生する原因...
-
システム開発の工数と費用について
-
asp.NET初心者です。「 ’Contex...
-
セッションIDを取得したい
-
Accessの画面更新を一時的に停...
-
dos画面が一瞬立ち上がる
-
シングルサインオンの方法
-
複数のヤフーIDの画面ウィンド...
-
ASP.NET による画面遷移で質問...
-
ただいま勉強始めたての初心者...
-
submitボタンにvalue属性の値で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数選択のListBoxでClickイベ...
-
ポストバック時の画面スクロー...
-
C#でドラッグ&ドロップが機能し...
-
ポストバック(__doPostback)へ...
-
Ctrl+vのイベントを解除
-
【ASP.NET】マスターページに配...
-
【VB6】 変数1 = 変数1 Or $H2
-
DragEnterイベントについて(VS...
-
aspxファイル実行時の表示順に...
-
【ASP2.0】TextBoxのフォーカス...
-
リストビュー内でのドラッグ&...
-
[ASP.NET] ページ内でジャンプ。
-
自作exeを常駐させるとPCがシャ...
-
TreeViewの制御について
-
ドラッグドロップ(AllowDrop)に...
-
VBのタイマーイベントについて
-
VBAで一時中断したプログラムの...
-
画面遷移が不正ですと表示されます
-
getParameterで値が取得できず...
-
コネクション・セッション・ト...
おすすめ情報