- PR -

ASP.NETです。呼び出したクラスで、表示の処理をさせたいです。

1
投稿者投稿内容
ゆき
大ベテラン
会議室デビュー日: 2003/11/02
投稿数: 121
投稿日時: 2003-12-03 11:03
こんにちわ
あるページでクラスを呼び出し、そのクラスで処理した結果を表示させたいと思っています。
関数のように呼び出し元のページに結果を返して、呼び出した側で表示の処理をするのではなく、
クラス内で表示までさせたいと思っています。
呼び出す側のページは、クラスにプロパティを設定してメッソドを発行すれば、後は何もしなくてよいという感じです。
クラスの側から呼び出し元のページを使って表示させる方法がわかりません。
どうしたらよいのでしょうか?
よろしくお願いいたします。
junya_s0
常連さん
会議室デビュー日: 2002/12/23
投稿数: 26
投稿日時: 2003-12-03 11:53
そのクラスがPageオブジェクトにアクセスできればよいと思うので、引数とかプロパティで見えるようにしてあげればよいと思いますよ。

#見当違いならゴメンナサイ
ゆき
大ベテラン
会議室デビュー日: 2003/11/02
投稿数: 121
投稿日時: 2003-12-03 12:48
 junya_s0さん、ご返事ありがとうございます。
引数やプロパティで見えるように?
どのようにすればよいのでしょうか?
(それもわからないほどの初心者なので・・・)
junya_s0
常連さん
会議室デビュー日: 2002/12/23
投稿数: 26
投稿日時: 2003-12-03 13:16
VB.NET使いなのでC#は書けません・・・w

メソッド呼び出し元ページ
コード:

Public Class WebForm1
Inherits System.Web.UI.Page

Public WithEvents Label1 As System.Web.UI.WebControls.Label 'PublicにしないとClass1から見えない



Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyCls as Class1

If Not(isPostBack) Then
MyCls.DispPage(Me)
End If
End Sub



End Class



作成するクラス
コード:

Public Class Class1

Public Sub DispPage(TargerPage as WebForm1)

TargetPage.Response.Write("Hello ASP.NET!")
TargetPage.Label1.Text = "Hello ASP.NET!!"

End Sub

End Class



引数パターンですが、こんな感じでどうでしょうか・・・。
オブジェクトのスコープについて調べてみたほうがよいかもしれませんね。

[ メッセージ編集済み 編集者: junya_s0 編集日時 2003-12-03 14:01 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2003-12-03 16:06
Labelを引数にわたすバージョン
コード:
//ページ側

Public class WebForm1: System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;

〜〜〜略

//例えばボタン押下時
private void Button1_Click(object sender, System.EventArgs e)
{
Class1.DispPage(Label1);
}
}

//クラス側
Public Class Class1
{
public static void DispPage(System.Web.UI.WebControls.Label label)
{
label.Text = "文字列";
}
}

pageごと引数にわたす場合はjunya_s0さんの例のように
Labelをpublicにするか、下記のようにpublicなプロパティを設定します。
コード:
//ページ側

Public class WebForm1: System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;

〜〜〜略

private void Button1_Click(object sender, System.EventArgs e)
{
Class1.DispPage(this);
}
//プロパティ設定
public string LabelText
{
set
{
this.Label1.Text = value;
}
}
}

//クラス側
Public Class Class1
{
public static void DispPage(page)
{
page.LabelText = "文字列";
}
}

Labelそのものをプロパティにする方法も考えられますね。
どれが(どれも?)正攻法かはわかりません。それに、これだと
WebForm1を操る専用のメソッドになってしまいますしね。

[ メッセージ編集済み 編集者: べる 編集日時 2003-12-03 16:11 ]
junya_s0
常連さん
会議室デビュー日: 2002/12/23
投稿数: 26
投稿日時: 2003-12-03 16:24
引用:

どれが(どれも?)正攻法かはわかりません。


Page_LoadあるいはPageのメソッドとして書くのが一番正攻法じゃないですかね。
何のためにクラス化するのかにもよるとは思いますが。

[ メッセージ編集済み 編集者: junya_s0 編集日時 2003-12-03 16:48 ]
ゆき
大ベテラン
会議室デビュー日: 2003/11/02
投稿数: 121
投稿日時: 2003-12-03 23:08
こんばんわ。
いろいろな手法があるのですね。
むずかし〜。
RegisterClientScriptBlockメソッドを使いたいとも思っているのですが、
これなどはどうすればよいのでしょうか?
Pageのメンバってなっているのに、
Page.とやっても、メンバ表示にも出てこないし・・・。
クラスでとなると、も〜さっぱりです。
なんか聞いてばっかりですいません。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-12-04 02:51
引用:

ひろこさんの書き込み (2003-12-03 23:08) より:
Pageのメンバってなっているのに、
Page.とやっても、メンバ表示にも出てこないし・・・。
クラスでとなると、も〜さっぱりです。


一度、クラスについて、特にクラスとインスタンスの概念、aspxページではクラスとインスタンスがどういう状態になっているのか、また、ページ内から各種プロパティにアクセスできますが、それはどういう構造になっているからか(どのようにして出来るようにしてあるのか)、ページではなく他のクラスのメソッドを実行しているとき、それらとの関係はどうなるのか(なぜそのままでは使用できないのか)、といった辺り(ごちゃごちゃしてすみません)を、考える、書籍やWebなどで調べるといった事をされた方が良いと思います。
# まあ、構造というかしくみというか、それをある程度理解するということです。

ある程度理解できるようになると、今回の色々な疑問や解決策についても見えてくると思います。
1

スキルアップ/キャリアアップ(JOB@IT)