首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CompilationMode=Never & SessionState

CompilationMode=Never & SessionState
EN

Stack Overflow用户
提问于 2009-12-02 21:16:24
回答 1查看 284关注 0票数 2

CompilationMode=Never似乎不允许适当地连接会话。

它首先抱怨这个页面上不允许使用EnbaleSessionState指令。

显式地将System.Web.SessionState.IRequiresSessionState分配给页面1避免了空引用异常(围绕.Session访问),但仍然没有正确地保持或连接会话。

是否有人在CompilationMode=Never?中成功地使用了ASP.NET会话?

从概念上讲,为什么这些应该是不相交的呢?

1- http://msdn.microsoft.com/en-us/library/system.web.ui.compilationmode.aspx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-15 14:15:19

我不知道您所处的确切情况,但您所说的是正确的- Page + IRequiresSessionState = Session。这就是你要做的。首先,为您的页面定义一个基类,它将接收会话状态:

代码语言:javascript
复制
public class BasePage : Page, IRequiresSessionState
{
}

然后在您的NoCompile页面中执行以下声明:

代码语言:javascript
复制
<%@ Page Language="C#" CompilationMode="Never" Inherits="BasePage" %>

按预期工作。会话状态可用。关于你的第二个问题:“从概念上讲,为什么这些问题是不相交的呢?”默认情况下页面

代码语言:javascript
复制
public class Page : TemplateControl, IHttpHandler
{
}

类不实现IRequiresSessionState,因此没有会话状态。ASP.NET为您所做的是在运行时为您编译一个类,它通过它提供会话--也就是说,如果我定义了一个名为Default.aspx的页面,并且在实现页面的类后面有代码,那么我将在任何地方显式实现ASP.NET但是ASP.NET将我们的Default.aspx UI编译成一个名为:

代码语言:javascript
复制
public class default_aspx : Default, IRequiresSessionState, IHttpHandler
{
}

它现在明确表示它希望传递会话状态。这是因为默认情况下,"EnbaleSessionState“在@Page指令中被设置为True。现在,当您通过指定"EnbaleSessionState“来说default.aspx是一个非编译单元时,就不会生成这个类,也永远不会得到会话状态,这使得使用CompilationMode="Never"没有意义,因此是禁用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1835891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档