あなたがいる正確な状況はわかりませんが、あなたの言うことは正しいです-ページ+ IRequiresSessionState =セッションが利用可能です。これがあなたがすることです。最初に、セッション状態を受け取るページの基本クラスを定義します。
public class BasePage : Page, IRequiresSessionState
{
}
次に、NoCompile ページで次の宣言を行います。
<%@ Page Language="C#" CompilationMode="Never" Inherits="BasePage" %>
期待どおりに動作します。セッション状態が利用可能です。2 番目の質問についてもう少し詳しく説明します。デフォルトでは、ページ
public class Page : TemplateControl, IHttpHandler
{
}
クラスは IRequiresSessionState を実装していないため、セッション状態はありません。ASP.NET があなたのために行うことは、実行時にセッションを提供するクラスをコンパイルすることです。つまり、Page を実装するコード ビハインド クラスを使用して Default.aspx というページを定義すると、IRequiresSessionStateを明示的に実装する場所はありません。しかし、ASP.NET は Default.aspx UI を次のクラスにコンパイルします。
public class default_aspx : Default, IRequiresSessionState, IHttpHandler
{
}
これは、セッション状態を配信する必要があることを明示的に示しています。これは、@Page ディレクティブの「EnbaleSessionState 」がデフォルトで True に設定されているためです。を指定して default.aspx が非コンパイル ユニットであると言うと、このクラスは生成されず、セッション状態も取得されないため、「EnbaleSessionState」の使用は意味がなく、無効になります。CompilationMode="Never"