单页请求上的属性

时间:2009-12-03 09:59:36

标签: asp.net-mvc

我有一个ASP.NET MVC页面,在页面内我将进行一些AJAX调用。

Controller中的属性是什么,只要页面仍然存在(即使在AJAX调用期间),其值仍然存在,并且当我切换到其他页面请求时会被销毁?

正如我们所知,

Controller.Session的密钥和价值观一直存在并且可以随时访问。在构造页面或进行AJAX调用时,Controller.Request处于活动状态。 Request变量不会从正常页面调用持续到同一页面上的后续AJAX调用。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

AJAX请求是完全单独的HTTP请求,请记住这一点,这里是各种服务器集合的快速概述:

HttpContext.Current.Application:应用程序级缓存集合在每个Web请求中都是相同的,无论Web请求来自何处

HttpContext.Current.Cache:缓存集合在每个Web请求中都是相同的,无论该Web请求来自何处

HttpContext.Current.Request:请求集合,包含查询字符串参数,发布值和提交的cookie。这将因每个HTTP请求而异,因此初始请求和后续AJAX请求之间会有所不同。

HttpContext.Current.Items:用于在单个Web请求上使用的组件之间存储数据的集合,因此在请求完成后被删除,并将在原始请求和AJAX请求之间重置

HttpContext.Current.Session:绑定到特定的浏览器会话(默认情况下使用Cookie),因此访问服务器的每个不同用户都是相同的。这是您想要完成的唯一真正的选择

答案 1 :(得分:1)

  只要页面仍然存在,

就会一直存在

页面永远不会真正“存在”。在ASP.NET MVC中根本没有页面概念。界面实体意义上的页面,其生命周期延伸到多个请求,能够持久保存一些数据和控件状态。有些观点只存在一个时刻,无法保留任何数据。

有要求。您已经请求了一个页面。服务器已将其返回给您并立即忘记它。您的Ajax调用是一个全新的请求。服务器甚至不知道它是否是Ajax请求。对于它,所有请求都是相同的,Get,Post或其他。

您可以使用TempData集合,它会在两个后续请求之间保留数据。

另一种选择是Session集合。它会在会话的许多请求之间保留数据。

答案 2 :(得分:0)

您在Request属性中找到的值可以从URL或POST正文中获取,因此如果在执行AJAX调用时它们不存在,即使在请求原始页面时它们存在,它们将不再可用。不同请求中唯一可用的属性是SessionTempData(使用会话在两个请求之间保留值)。