DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ascxからaspxのメソッドを呼び出したいです

環境/言語:[XP C#]
分類:[ASP.NET]

aspxからユーザーコントロールのメソッドにアクセスする方法は、MSのチュートリアルに載ってました。
その反対の、コントロールからaspxで定義したメソッドへアクセスする方法が分かりません。

aspx側で、Panel.Controls.Add( LoadControl("***.ascx") ); としてます。
***.ascxからaspxにアクセスする方法がわからず、
Parent.Parent.MyMethod()や、Parent.Parent.Page.MyMethod()など適当に手当たり次第ためしたのですが、そんなメソッド無いといわれます。

aspx側で全体で使うメソッドを定義して、
格コントロールでそれを使用したいのですが、そのメソッドへのアクセスがわからず苦戦してます。
そのヒントか、そのような方法の説明があるサイトが知りたいです。
お願いします。

言語はC#を使ってます。
キャストしてみて。
試してないけど。
■No9429に返信(tatsugoroさんの記事)
> キャストしてみて。
> 試してないけど。
>

すみません。遅くなりました。
キャストの方法がというか、クラスの指定がどうしても分かりませんでした。


---[Test.aspx]---
<%@ Page Language="C#" ClassName="TestClass" %>
<%@ Register TagPrefix="con" TagName="ControlTest" src="ControlTest.ascx" %>

<script runat="server">
public string Mess = "メッセージ";
void Page_Load( Object sender, EventArgs e ){
this.ID = "ParentID";
}
</script>

<hr>
<form runat="server">
<con:ControlTest runat="server" />
</form>
<hr>


---[ControlTest.ascx]---
<%@ Control Language="C#" %>

<script runat="server">
void ParentMessage(){
Response.Write( "ID = " + Parent.Page.ID + ";<br>" );
//(TestClass)にキャスト出来ない???
//Response.Write( "Mess = " + Parent.Page.Mess + ";<br>" ); ←エラー
}
</script>

メッセージを表示する<br>
<%
ParentMessage();
%>



どこがだめなのかさっぱりでした。
親フォームのメンバにアクセスするいい方法無いでしょうか?
> <%@ Page Language="C#" ClassName="TestClass" %>
> <%@ Register TagPrefix="con" TagName="ControlTest" src="ControlTest.ascx" %>

コードインラインでしたか。WebMatrixかな。はじめに知りたかったところです。
コードインラインはほとんど扱ったことが無いんでよくわからないです。
ですので、私でも知ってる、別の解決策を提案しときます。

コントロールから親を見るのではなく、親から子に値を渡します。

動作する単純化したサンプルは以下のもの。
----------
Test.aspx
----------
<%@ Page Language="C#" ClassName="TestClass" %>
<%@ Register TagPrefix="con" TagName="ControlTest" src="ControlTest.ascx" %>
<html>
<body>
<hr>
<form runat="server">
<con:ControlTest Mess="メッセージ" runat="server" />
</form>
<hr>
</body>
</html>

----------
ControlTest.ascx
----------
<%@ Control Language="C#" className="ControlTest" %>
<script runat="server">
public string Mess;
</script>
<%
Response.Write("Mess = " + Mess + ";<br>");
%>


以下のページを熟読したほうがいいと思います。
.NET Framework 開発者ガイド
Web フォーム ユーザー コントロール
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconconvertingwebformspagetopageletcontrol.asp

----------
tatsugoro
http://www.codeseek.net
■No9428に返信(のりまきさんの記事)
> aspxからユーザーコントロールのメソッドにアクセスする方法は、MSのチュートリアルに載ってました。
> その反対の、コントロールからaspxで定義したメソッドへアクセスする方法が分かりません。
>
> aspx側で、Panel.Controls.Add( LoadControl("***.ascx") ); としてます。
> ***.ascxからaspxにアクセスする方法がわからず、
> Parent.Parent.MyMethod()や、Parent.Parent.Page.MyMethod()など適当に手当たり次第ためしたのですが、そんなメソッド無いといわれます。
>
> aspx側で全体で使うメソッドを定義して、
> 格コントロールでそれを使用したいのですが、そのメソッドへのアクセスがわからず苦戦してます。
> そのヒントか、そのような方法の説明があるサイトが知りたいです。
> お願いします。
>
> 言語はC#を使ってます。

のりまきさんこんにちは。
C#解らないのでVBで。

Dim MooParent As 親クラス名 = Me.Parent
MooParent.何らかの処理(引数)

ではだめですか?
>コントロールから親を見るのではなく、親から子に値を渡します。

子から親まずかったですか?
タグの属性見たいに値渡せたのですね。
この方法使わせていただきます。


>Dim MooParent As 親クラス名 = Me.Parent

(親クラス名) に何を指定するのか分からず
適当に親の@PageディレクティブのClassNameに"TestClass"を指定して、
子で(TestClass)にキャストしたら、

CS0246: 型または名前空間名 'TestClass' が見つかりませんでした。ディレクティブを使うかアセンブリ参照を使ってください。

とエラーが出て途方にくれてたんですが、親のクラスへアクセス出来ないのかな?
全体の構造を変えることにします



いろいろとありがとうございました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板