0

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

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

任何输入都受到高度赞赏。

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

4

5 回答 5

1

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

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

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

于 2009-07-08T21:36:42.353 回答
0

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

不要在每次请求后删除密钥。只需使用一个静态(我认为这是在 Visual Basic 中共享的)整数,每次需要唯一值时使用并递增它。还要每次都使用一个高得离谱的 mod,以确保它不会在单个请求中被重用,并且永远不会溢出。

于 2009-07-08T21:31:40.850 回答
0

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

于 2009-07-08T21:32:43.297 回答
0

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

于 2009-07-08T21:34:14.167 回答
0

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

public class ItemController : Controller 
{

    private int _UniqueID = 0;

    public ActionResult Index()  
    {
         foreach (var item in items)
         {
              item.UniqueID = _UniqueID++;
         }
         // etc...
    }
于 2009-07-08T21:34:58.143 回答