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
发布于 2010-01-15 14:15:19
我不知道您所处的确切情况,但您所说的是正确的- Page + IRequiresSessionState = Session。这就是你要做的。首先,为您的页面定义一个基类,它将接收会话状态:
public class BasePage : Page, IRequiresSessionState
{
}然后在您的NoCompile页面中执行以下声明:
<%@ Page Language="C#" CompilationMode="Never" Inherits="BasePage" %>按预期工作。会话状态可用。关于你的第二个问题:“从概念上讲,为什么这些问题是不相交的呢?”默认情况下页面
public class Page : TemplateControl, IHttpHandler
{
}类不实现IRequiresSessionState,因此没有会话状态。ASP.NET为您所做的是在运行时为您编译一个类,它通过它提供会话--也就是说,如果我定义了一个名为Default.aspx的页面,并且在实现页面的类后面有代码,那么我将在任何地方显式实现ASP.NET但是ASP.NET将我们的Default.aspx UI编译成一个名为:
public class default_aspx : Default, IRequiresSessionState, IHttpHandler
{
}它现在明确表示它希望传递会话状态。这是因为默认情况下,"EnbaleSessionState“在@Page指令中被设置为True。现在,当您通过指定"EnbaleSessionState“来说default.aspx是一个非编译单元时,就不会生成这个类,也永远不会得到会话状态,这使得使用CompilationMode="Never"没有意义,因此是禁用的。
https://stackoverflow.com/questions/1835891
复制相似问题