CompilationMode = Never & SessionState - PullRequest
       17

CompilationMode = Never & SessionState

2 голосов
/ 03 декабря 2009

Кажется, что CompilationMode = Никогда не позволяет правильно подключать сеансы.

Сначала жалуется, что директива EnbaleSessionState не разрешена на этой странице.

Явное присвоение System.Web.SessionState.IRequiresSessionState странице [1] позволяет избежать исключений нулевой ссылки (вокруг доступа к .Session), но все еще не сохраняется или корректно подключается к сеансам.

Кто-нибудь успешно использовал сеансы ASP.NET с CompilationMode = Никогда ?

Концептуально, почему они должны быть непересекающимися?

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

1 Ответ

2 голосов
/ 15 января 2010

Я не знаю точную ситуацию, в которой вы находитесь, но то, что вы говорите, правильно - Page + IRequiresSessionState = Session Available. Вот что ты делаешь. Сначала определите базовый класс для ваших страниц, которые будут получать состояние сеанса:

public class BasePage : Page, IRequiresSessionState
{
}

Затем на своей странице NoCompile вы делаете следующее объявление:

<%@ Page Language="C#" CompilationMode="Never" Inherits="BasePage" %>

Работает как положено. Состояние сеанса доступно. Теперь немного о вашем втором вопросе: «Концептуально, почему они должны быть непересекающимися?». По умолчанию Страница

public class Page : TemplateControl, IHttpHandler
{
}

класс не реализует IRequiresSessionState и поэтому не имеет состояния сеанса. ASP.NET делает для вас компиляцию класса во время выполнения, через которое он предоставляет сеанс, т.е. если я определяю страницу с именем Default.aspx, с кодом позади класса, реализующего Page, нигде я не реализую явно IRequiresSessionState . Но ASP.NET компилирует наш пользовательский интерфейс Default.aspx в класс с именем:

public class default_aspx : Default, IRequiresSessionState, IHttpHandler
{
}

, который теперь явно говорит, что он хочет, чтобы состояние сеанса было доставлено. Это связано с тем, что " EnbaleSessionState " в директиве @ Page по умолчанию имеет значение True. Теперь, когда вы говорите, что default.aspx - это некомпилируемая единица с указанием CompilationMode="Never", тогда этот класс никогда не генерируется, и вы никогда не получите состояние сеанса, что делает использование « EnbaleSessionState » бессмысленным и таким образом отключен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...