2009-07-08 54 views
0

我有一个ASP.NET MVC应用程序。我已经想出了将自动增量值用作独特元素ID的想法。问题是,我如何拥有和使用一个全局变量,它在请求(页面生成)期间应该在那里,但不再?需要存储请求持续时间的静态值。怎么样?

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

任何输入,非常感谢。

编辑:我有一些HTML辅助,可以从不同角度和局部视图被称为的,所以宣布在页面上一个变量,并把它传递给每一个助手,显然不是一个好办法。我希望只使用助手,并知道他们都在幕后获得独特的ID。

+0

是不是有一个HttpRequest对象在asp.net MVC(类似于Page.Request在web表单)? – 2009-07-08 21:30:28

+0

是的,有。你有什么建议? – User 2009-07-08 21:31:41

+0

您不能将它存储在请求对象中(注意不要与任何已经预设的键名冲突)?请求[“keyName”] =值 – 2009-07-08 21:38:48

回答

0

如果你需要的是存储号码,这将需要管理其生活方式的资源需要占用大量的不止有一个静态的整数,总是重复使用它。

每次请求后不要打扰删除密钥。只需使用静态(我认为这是在Visual basic中共享的)整数,每次需要唯一值时使用并增加它。也可以每次使用一个可笑的高数量的mod,以确保它不会在单个请求中重用,并且永远不会溢出。

+0

静态将意味着它由该网站的所有用户共享。进一步阅读这个问题,我不认为这是他想要的。 – 2009-07-08 21:40:54

+0

从我阅读的内容来看,他想要的只是元素ID的唯一编号。数字是否共享并不重要(在这种情况下,一个变量是共享的,但从中检索的值肯定是唯一的)。 – 2009-07-08 23:14:43

0

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

0

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

0

您可以创建在您的控制器中的成员变量将被再生为每个请求:

public class ItemController : Controller 
{ 

    private int _UniqueID = 0; 

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

好吧,我用Google搜索了一点,发现在ASP.NET论坛的解决方案。

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

很显然,我可以使用HttpContext.Current.Items收集有我的小静态变量的请求的持续时间。

相关问题