2012-02-28 159 views
1

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

在我们使用了一些在variables.asp定义的全局变量的ASP代码,例如:

<% 
dim lId 
%> 

这是ASP则包含在所有的页面。还有许多其他包含文件引用这些变量,以及页面本身。

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

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

但是,我意识到,这个变量是比它的.asp如何工作更加“全球化”,而它可能会导致线程问题等,并且它们会像使用Application()对象那样工作,这不是我所追求的。

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

在这个阶段,我能想到的唯一的事情就是用Session变量,并在每个处理结束,以清除它们,但我害怕这样的转换

+0

这是一个asp.net webforms应用程序或asp.net mvc应用程序? – lomaxx 2012-02-28 09:21:55

回答

0

您可以创建的工作/问题在你的asp.net项目中存储这些静态变量的类。如果它们是配置参数,它们应该放在web.config文件中。

+0

感谢您的快速响应。它们不是配置参数,它们不是静态的。它们用于跟踪您正在修改的记录的ID,无论您是添加/修改/删除记录等,所有事情在每篇文章中都有所不同。通过创建一个类,我简单地进行了实验,但它变成了鸡和蛋 - 我需要一个全局变量来保存类的实例? – Chudles 2012-02-28 02:35:49

+0

听起来不像是全局变量。也许你应该使用viewstate来存储它们。 – jmaglio 2012-02-28 02:49:53

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 

又在哪里过我当前参“锅盖”,我需要“gv.Id”来代替。

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