- ゆき
- 大ベテラン
- 会議室デビュー日: 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などで調べるといった事をされた方が良いと思います。
# まあ、構造というかしくみというか、それをある程度理解するということです。
ある程度理解できるようになると、今回の色々な疑問や解決策についても見えてくると思います。
|