需要在请求期间存储静态值。怎么样?

时间:2009-07-08 21:20:54

标签: asp.net asp.net-mvc request-pipeline

我有一个ASP.NET MVC应用程序。我已经想到了生成自动增量值以用作唯一元素ID。问题是,我如何拥有并使用全局变量,该变量应该在请求(页面生成)期间存在但不再存在?

我想过为这个共享变量使用TempData,然后在页面完成后删除这个键。但是,在代码中清除此TempData密钥的位置呢?显然,它必须是已经呈现页面的最后一段代码。

非常感谢任何输入。

编辑:我有许多可以从各种视图和部分视图调用的HTML帮助程序,因此在页面上声明变量并将其传递给每个帮助程序显然不是一个好的解决方案。我希望只使用帮助者,并且知道他们都在幕后获得独特的ID。

5 个答案:

答案 0 :(得分:1)

好的,我已经google了一下,在ASP.NET论坛上找到了解决方案。

http://forums.asp.net/t/1401685.aspx

显然,我可以使用HttpContext.Current.Items集合在请求期间获得我的小静态变量。

答案 1 :(得分:0)

如果您只需要存储一个数字,那么管理其生活方式所需的资源将不仅仅需要一个静态整数并且总是重复使用它。

请勿在每次请求后删除密钥。只需使用静态(我认为这是在visual basic中共享)整数,每次需要一个唯一值时使用并递增它。每次使用一个非常高的数字的mod,以确保它不会在一个请求中重复使用,它永远不会溢出。

答案 2 :(得分:0)

为什么不在页面视图文件的顶部定义整数变量? 在整个视图渲染执行过程中使用它,在它结束时,您可以轻松地保持原样。您不必明确销毁任何东西。您的变量仅在请求期间存在。 IIS是无状态服务(如果你减去Session,Cache和Application变量),所以它并没有真正记住任何内容。

答案 3 :(得分:0)

我想你可以使用global.asax.cs中的Application_BeginRequest和Application_EndRequest方法;注意我目前无法仔细检查方法名称,但我认为它们很接近。

答案 4 :(得分:0)

您可以在控制器中创建一个成员变量,该变量将针对每个请求重新生成:

public class ItemController : Controller 
{

    private int _UniqueID = 0;

    public ActionResult Index()  
    {
         foreach (var item in items)
         {
              item.UniqueID = _UniqueID++;
         }
         // etc...
    }