2

CompilationMode=Neverでは、セッションを適切に接続できないようです。

最初に、このページではEnbaleSessionStateディレクティブが許可されていないことを訴えます。

System.Web.SessionState.IRequiresSessionStateをページに明示的に割り当てる[1] と、null 参照の例外 (.Session アクセス周辺) は回避されますが、セッションが正しく保持されたり接続されたりすることはありません。

CompilationMode=Neverで ASP.NET セッションを正常に使用した人はいますか?

概念的に、なぜこれらはバラバラである必要があるのでしょうか??

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

4

1 に答える 1

2

あなたがいる正確な状況はわかりませんが、あなたの言うことは正しいです-ページ+ 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"

于 2010-01-15T14:15:19.977 に答える