2013-03-14 69 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