我不知道確切的情況下,你都在,但你說的是正確的 - 頁+ IRequiresSessionState =會話中可用。這是你做的。在NoCompile頁
public class BasePage : Page, IRequiresSessionState
{
}
然後你做以下聲明:首先定義一個基類爲您的網頁將接收會話狀態
<%@ Page Language="C#" CompilationMode="Never" Inherits="BasePage" %>
按預期工作。會話狀態可用。現在再多談一點你的第二個問題:「從概念上講,爲什麼這些不相交?」。 默認頁面
public class Page : TemplateControl, IHttpHandler
{
}
類未實現IRequiresSessionState因此沒有會話狀態。 ASP.NET爲你做的是在運行時爲你編譯一個類,通過它提供會話 - 也就是說,如果我定義了一個名爲Default.aspx的頁面,其中的代碼落在實現頁面的類後面,無處我明確實現了IRequiresSessionState。但ASP.NET將我們的Default.aspx UI編譯成一個名爲
public class default_aspx : Default, IRequiresSessionState, IHttpHandler
{
}
現在明確表示它希望傳遞會話狀態。這是因爲@頁面指令中的「EnbaleSessionState」默認設置爲True。現在,當您通過指定CompilationMode="Never"
指出default.aspx是非編譯單元時,則永遠不會生成此類,並且您永遠不會獲得會話狀態,這會使「EnbaleSessionState」變得無意義並因此被禁用。