Session Webmatrix、Razor和会话

Session Webmatrix、Razor和会话,session,razor,webmatrix,Session,Razor,Webmatrix,我在Razor.cshtml页面上看到了一些会话变量的古怪行为。基本上,在某些页面上,我检查会话变量是否已设置,如果未设置,则进行设置。我一直得到一个空的对象引用 我相信这是因为Razor最终是为MVC设计的,我读了一些关于MVC生命周期的书,显然会话对象被注入生命周期中的另一个点,然后说asp.net webforms。因此,当我尝试在我的页面上使用它时,它还不可用 因此,我的问题是,对于基于Razor的简单站点(还不是MVC,但正在以这种方式移动),如何有效地检查会话变量是否设置了(比如说“

我在Razor.cshtml页面上看到了一些会话变量的古怪行为。基本上,在某些页面上,我检查会话变量是否已设置,如果未设置,则进行设置。我一直得到一个空的对象引用

我相信这是因为Razor最终是为MVC设计的,我读了一些关于MVC生命周期的书,显然会话对象被注入生命周期中的另一个点,然后说asp.net webforms。因此,当我尝试在我的页面上使用它时,它还不可用

因此,我的问题是,对于基于Razor的简单站点(还不是MVC,但正在以这种方式移动),如何有效地检查会话变量是否设置了(比如说“访问级别”),并且经常检查会话变量。这将是问题的一部分

问题的第二部分是,如果这是一种不好的做法,那么我应该做些什么来取代这种做法


感谢您的输入。

ASP.NET MVC 3中的Razor视图页面的执行方式与使用Razor语法的ASP.NET网页几乎相同。作为记录,Razor最初是为网页开发的,而不是为MVC开发的——我们后来对它进行了修改,以确保它在这两种情况下都是“一流公民”


因此,会话状态应该可以很好地工作,无论您在哪里使用它-在网页文件、MVC控制器甚至MVC视图中(尽管大多数人认为在MVC视图中使用会话状态是一种不好的做法)。

您能为一个简单的页面添加代码来重新处理您的问题吗?如果放置一个简单的{if(Session[“xxx”]!=null){bla bla…}并且您偶尔会收到错误(是的,请将这些行打断)。如果我使用其中一种呈现方法,如@RendorPage,则会话在呈现页面上似乎可以正常工作。同样,我认为这是一个MVC生命周期问题,只是想知道他们的解决方案是否简单/懒惰。如果不是的话,我想我会改变我使用会话的方式,这可能是一件好事,取决于其他选择(比如说,镶嵌饼干),但这有点让人扫兴。就像新工具一样,只是不喜欢旧工具被拿走。也许你必须想出一个更明确的方案。从我的观点来看,会话是有效的。好吧,即使是简单的例子对我来说也不是始终如一的有效(有时有效,有时无效)。但是现在我假设我的代码或者我的服务器已经失效了(不要认为这是代码,因为它有时也能工作,但奇怪的事情发生了)。所以我接受这个答案。