1

私はasp.netが初めてで、問題を解決しようとしています。

vb.net クラスを参照する単純な aspx ページ (asp Web サイト) を作成しました。セッション コンテキスト オブジェクトを使用して 1 つのクラス インスタンスを処理しています (より良い方法があるかどうかはわかりません)。このクラスには、文字列値を設定するサブルーチンとそれを返す関数があります。

Web サイト プロジェクトをコンパイルして実行し、ある aspx ページから値 "1" を設定し、別のページから値 "2" を設定します (最初のページから URL をコピーして貼り付けて 2 番目のタブまたはブラウザーを開きます)。値を取得すると、両方のページに「2」が表示されます。

vb.net フォーム アプリケーション (.exe) の同じクラスは、exe インスタンスが実行されているときに問題なく動作します。最初のクラスは値 "1" を返し、2 番目のクラスは値 "2" を返します。これは、Web サイト プロジェクト、異なるページ、異なる DLL インスタンスで動作する方法です。

Class:
Public Class Class1

    Private sExten As String

    Public Sub setExten(value As String)
        sExten = value
    End Sub

    Public Function getExten() As String
        Return sExten
    End Function

End Class

aspx:
Partial Class _Default
    Inherits System.Web.UI.Page

    'trying to ensure one instance is running
    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            Session.Add("ClassLibrary1", New ClassLibrary1.Class1)
        End If
    End Sub

    'txtSetValue.text contains value "1" or "2"
    Protected Sub btnSet_Click(sender As Object, e As EventArgs) Handles btnSet.Click
        CType(Session.Item("ClassLibrary1"), ClassLibrary1.Class1).setExten(txtSetValue.text)
    End Sub

    'the txtShowValue shows "1" in the first and "2" in the second page
    Protected Sub BtnGet_Click(sender As Object, e As EventArgs) Handles BtnGet.Click
        txtShowValue.Text = CType(Session.Item("ClassLibrary1"), ClassLibrary1.Class1).getExten()
    End Sub

End Class
4

1 に答える 1

0

両方のページが同じSession.Item( "ClassLibrary1")を共有しています。値を非表示フィールドまたは非表示のラベルに保存してみてください。

于 2013-03-14T22:06:39.247 に答える