ASP.Net Global / Page Scope变量

时间:2012-02-28 00:50:42

标签: asp.net-mvc

我正在将一个经典的ASP应用程序转换为ASP.Net,并且已经遇到了与全局变量(或页面范围变量)相关的问题。请注意,应用程序不是典型的应用程序,因为它不构建HTML。相反,它获取AJAX请求并返回JSON字符串,因此不会使用很多asp.net功能。很长一段时间,谷歌搜索没有让我得到答案!

在asp代码中,我们使用variables.asp中定义的许多全局变量,例如:

<%
dim lId
%>

然后这个asp包含在所有页面中。还有许多其他包含文件引用这些变量以及页面本身。

对于asp.net,我能找到的最接近的是variables.aspx:

<SCRIPT LANGUAGE="VBScript" RunAt="Server">
shared dim lId as integer
</SCRIPT>

然而,我意识到这个变量比它在.asp中的工作方式更“全局”,并且它可能导致线程问题等,并且它们有效地工作就像使用Application()对象一样,这不是什么我在追求。

实际上我需要的是能够声明一个可以在其他包含中引用的变量,以及在基页中,其范围/生命周期仅用于处理该页面。

在这个阶段,我唯一能想到的是使用Session变量,并在每次处理结束时清除它们,但是我担心这种转换的工作/问题

2 个答案:

答案 0 :(得分:0)

您可以在asp.net项目中创建一个类来存储这些静态变量。如果它们是配置参数,则应该放在web.config文件中。

答案 1 :(得分:0)

看起来我最终可能会做以下事情:

shared dim gv as New GlobalVariables

public class GlobalVariables
    public property Id as integer
        Get
            Id = cint(HttpContext.Current.Items("id"))
        End Get
        set (ByVal aiValue as integer)
            HttpContext.Current.Items("id") = aiValue
        End Set
    end property
end class

然后我在哪里引用“lId”,我需要替换为“gv.Id”。

gv仍然是全局的,但鉴于它正在查看current.items,我不应该有任何线程问题。