我有一个ASP.NET MVC页面,在页面内我将进行一些AJAX调用。
Controller
中的属性是什么,只要页面仍然存在(即使在AJAX调用期间),其值仍然存在,并且当我切换到其他页面请求时会被销毁?
Controller.Session
的密钥和价值观一直存在并且可以随时访问。在构造页面或进行AJAX调用时,Controller.Request
处于活动状态。 Request
变量不会从正常页面调用持续到同一页面上的后续AJAX调用。
有什么想法吗?
答案 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调用时它们不存在,即使在请求原始页面时它们存在,它们将不再可用。不同请求中唯一可用的属性是Session
和TempData
(使用会话在两个请求之间保留值)。