2013-03-14 68 views
1

我是新來的asp.net,我試圖解決一個問題。ASP.NET DLL實例衝突

我創建了一個引用vb.net類的簡單aspx頁面(asp網站)。 我正在使用會話上下文對象處理一個類實例(不知道是否有更好的方法)。 該類有一個設置字符串值和返回它的函數的子集。

我編譯並運行網站項目,然後從一個aspx頁面設置值「1」,並從另一個頁面設置值「2」(我通過從第一個頁面複製粘貼URL打開第二個標籤頁或瀏覽器頁面),然後檢索值,兩個頁面將顯示「2」。

當exe實例正在運行時,vb.net表單應用程序(.exe)中的相同類運行良好,第一個返回值「1」,第二個返回值「2」。這是我希望它在我的網站項目,不同的頁面不同的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 
+0

您正在覆蓋Tab2中的會話值2,因此預期會返回2而不是1.如果您想讓它們分開,請查看此[SO解決方案](http://stackoverflow.com/a/) 2844472/125551) – 2013-03-14 21:59:43

回答

0

這兩個頁面共享相同的Session.Item(「ClassLibrary1」)。您可以嘗試將該值存儲在隱藏字段或不可見標籤中。

+0

信息:這是正確的。但同樣的問題出現在另一個.net dll(更復雜),甚至認爲會話項目被正確命名。我們發現在vb.net模塊(或c#靜態類)中聲明的變量中檢測到了衝突的原因。通過移動類中的變量(非靜態)來解決問題。 – Spyros 2013-03-15 22:35:46