- PR -

自作クラスでServer.MapPathを参照したい

1
投稿者投稿内容
donchan
会議室デビュー日: 2003/02/25
投稿数: 7
投稿日時: 2003-04-21 16:57
こんにちは、ASP.NETでWebアプリを作っています。

自作クラス(共通関数群)を作成したのですが、その中でServer.MapPathを参照できません。
共通関数のメソッドを呼ぶ方(aspxのページクラス)でMeを渡すと、
共通関数内でも参照できます。(パラメータ.MapPath)

自作クラスは何か継承させないといけないのでしょうか?

よろしくお願いします。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-04-22 15:47
こんにちは。

Server は、System.Web.UI.Pageのプロパティなので、aspxのページクラスでは
直接 Server.MapPath と記述することができます。
(aspxのページクラスは System.Web.UI.Page から派生させているため)

一方、自作クラスのほうは、明示的に派生元クラスを記述していないと思います。
その場合には、object からの派生となるため、Serverプロパティがなく、
直接 Server.MapPath と記述することはできません。

共通関数のパラメータでMeを渡すと System.Web.UI.PageにMapPathメソッドが
あるので、パラメータ.MapPath()と記述することができます。

また、共通関数のパラメータでMeを渡す以外にも、自作クラス内に、
System.Web.UI.Page型の変数を定義しておくという方法も取れるかと思います。
donchan
会議室デビュー日: 2003/02/25
投稿数: 7
投稿日時: 2003-04-22 16:08
Qooさん、書き込みありがとうございます。
もう少し質問させてください。

実際に以下のようなコードを書いてみたんですが、
うまくいきません。どこが悪いのでしょうか・・・?

==========================================================
Public Class ComFunction
Inherits System.Web.UI.Page

Public Shared Function Method_A() As String
Dim objPage As New System.Web.UI.Page()

return objPage.MapPath(".")
'return Me.MapPath(".")

End Function

End Class

=============================================================
System.Web.UI.Pageを継承し、Me.MapPathを使おうと思ったんですが、
メソッドがSharedなので、ダメみたいでした。

そこで、System.Web.UI.Pageの変数を宣言して、
objPage.MapPathを参照してみたのですが、以下のような例外が発生してしまいます。

実行時例外がスローされました : System.NullReferenceException - オブジェクト参照がオブジェクト インスタンスに設定されていません。

よろしくお願いいたします。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-04-22 16:47
こんにちは。

Dim objPage As New System.Web.UI.Page()
とした場合、aspx と結びついていないのではないかと思います。(推測)

自作クラス内に Page 型の変数を定義しておくというところが
少し言葉足らずでした。コンストラクタを用いて、下記のように
記述することができます。

コード:
Public Class ComFunction

    Dim objPage As System.Web.UI.Page

    ' コンストラクタ
    Sub New(ByVal myPage As System.Web.UI.Page)
        objPage = myPage
    End Sub

    ' 共通関数
    Public Function Method_A() As String
        Return objPage.MapPath(".")
    End Function

End Class



呼び出し側は、下記の記述となります。
コード:
        Dim str As String
        Dim obj As ComFunction = New ComFunction(Me)
        str = obj.Method_A()


donchan
会議室デビュー日: 2003/02/25
投稿数: 7
投稿日時: 2003-04-22 19:24
Qooさん、こんにちは。
ご返信ありがとうございます。

できればNewせずにいいように、メソッドをSharedにしたかったのですが、
どこかでMeを渡さないといけないのですね。

教えていただいた方法でいこうと思います。
ありがとうございました。
124
会議室デビュー日: 2003/04/22
投稿数: 1
投稿日時: 2003-04-22 20:21
こんにちは。
自分も自作クラスでMapPathメソッドを使いたいと思った
ことがあったので、そのときは以下のように記述しました。
コード:
Public Class ComFunction
    Public Function Method_A() As String
        Return HttpContext.Current.Server.MapPath(".")
    End Function
End Class


上記の方法だとMeを渡さなくて済むので、Sharedにもできると思います。
donchan
会議室デビュー日: 2003/02/25
投稿数: 7
投稿日時: 2003-04-22 20:31
124さん、教えていただいた方法でバッチリでした。
助かりました。
ありがとうございました。
1

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