首先获得一些背景信息。我在职业生涯的大部分时间里一直在使用Web Forms,并且最近对.NET MVC感兴趣。我意识到它是无国籍的,然而,我不明白它是如何完全可行的。在表单应用程序中,用户进行身份验证,然后返回用户ID和一些角色,然后将这些角色放在该用户会话中。当我需要它们时,我所要做的就是将它拉出会话而我已经拥有它。根据我的阅读,会话和MVC是互斥的。我已经读过,可以使用TempData来传递值,但它只会持续一页访问,然后就会消失。有没有一种标准方法可以将数据“持久化”在MVC站点上,而不是将冗余代码添加到我想传递数据的每个控制器?
答案 0 :(得分:4)
我认为这里可能存在一些混淆。这里真正无状态的是HTTP协议。 ASP.NET WebForms是一种技术,旨在尝试构建一个“解决”HTTP无状态的框架,并创建一个基于状态的Web应用程序框架。这就是为什么你在WebForms中看到的东西,比如ViewState,它基本上沿着管道传递应用程序的状态。
ASP.NET MVC出现并采取了不同的方法。它包含了HTTP的无状态。这就是MVC中没有ViewState的原因。
但是,这并不意味着您不再与有状态实体进行交互。客户端机器(例如浏览器)是一个有状态的应用程序,就像运行服务器端代码的服务器(在这种情况下是IIS或其他)一样,也是有状态的。
因此,服务器端的内容仍然是有状态的(如Session,Application,Cache),您仍然可以使用它们。此外,客户端也是有状态的,这就是为什么客户端脚本近年来变得如此强大的原因;人们试图充分利用浏览器的状态。
答案 1 :(得分:2)
ASP.NET MVC框架是基于ASP.NET框架构建的,因此,您可以在ASP.NET MVC中使用Session状态:
Session["MyVar"] = "SomeValue";