- PR -

ViewStateをモジュールやクラスで共通化する方法は?

1
投稿者投稿内容
4423
会議室デビュー日: 2004/05/21
投稿数: 17
投稿日時: 2004-07-08 17:03
Webの複数のPageで同じようなことをしているViewStateの処理を
共通化したいのですがどうすればよいのでしょうか?

思い描いているのは下記のような感じなのですが、「viewstateが宣言されていません」
とエラーが返ります。

Public Structure UrlInfo
Public OPEN As String
Public MENU As String
End Structure

Public InfoUrl As UrlInfo

Public Function SetViewState(ByVal AA As UrlInfo)
viewstate("OPEN") = AA.OPEN
viewstate("MENU") = AA.MENU
End Function

Public Function GetViewState(ByRef AA As UrlInfo)
AA.OPEN = viewstate("OPEN")
AA.MENU = viewstate("MENU")
End Function

お分かりになられる方がお見えでしたら、教えて戴けないでしょうか?
宜しくお願いします。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2004-07-08 17:39
まさか複数のWebページで同じ値を使い回すためにViewStateを利用しようとしているのではないですよね?

と前置きしたうえで。
ViewStateはSystem.Web.UI.Pageが保持するプロパティ(UI.StateBag)ですから

コード:
Public Function SetViewState(p As System.Web.UI.Page, ByVal AA As UrlInfo) 
p.viewstate("OPEN") = AA.OPEN 
p.viewstate("MENU") = AA.MENU 
End Function 



こんな感じです。変数のスコープを考えましょう。
または、pを予めクラスのインスタンス変数に保存させておいても可かと(←このやり方はモジュールではNG)。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-07-08 18:11
私だったらこうします。

コード:
Public Class BasePage
    Inherits Page

    Protected Property UrlInfo() As UrlInformation
        Get
            Return CType(Me.ViewState("UrlInfo"), UrlInformation)
        End Get
        Set(ByVal Value As UrlInformation)
            Me.ViewState("UrlInfo") = Value
        End Set
    End Property

End Class

Public Class UrlInformation
    Public OPEN As String
    Public MENU As String
End Class

4423
会議室デビュー日: 2004/05/21
投稿数: 17
投稿日時: 2004-07-09 10:15
まるく殿、一郎殿、ご返答ありがとうございます。

一郎殿のクラスのプロパティを使用することで実現することができました。
ありがとうございます。

Protected Property UrlInfo() As UrlInformation
        ↓
Public Property UrlInfo() As UrlInformation
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2004-07-09 10:51
引用:

四四二三さんの書き込み (2004-07-09 10:15) より:

Protected Property UrlInfo() As UrlInformation
        ↓
Public Property UrlInfo() As UrlInformation



余計なお世話かもしれませんが、Protectedのままで正しいです。スコープをPublicにされているという事は、一郎さんの書き込み内容が正しく伝わっていないという事です。
本当に保持した値をうまく取り出せていますか? そのクラスをSessionに入れたりしているなら、ViewStateを利用している意味がないですし、ちょっとその辺りがよく判りませんでした。
1

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