我正在将一个经典的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变量,并在每次处理结束时清除它们,但是我担心这种转换的工作/问题
答案 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,我不应该有任何线程问题。