2009-10-12 1 views
0

Ситуация такова:Как получить доступ к текущей [веб-странице] (за пределами текущей страницы)?

У меня есть абстрактный класс, используемый глобально, который используется для ссылки на переменную сеанса через общедоступное свойство. Теперь мы хотим изменить его поведение, чтобы вернуть свойство на главной странице.

(Просто меняя начинку этого конкретного свойства, мы надеемся избежать делать много перезаписей)

Это только отрывок из класса:

public abstract class AppSession 
    { 
     public static CaseNumber CurrentCaseNo 
     { 
      /* OLD METHOD DELETED */ 

      get 
      { 
       if (CurrentPage.Master != null) 
       // property on the master page 
        return CurrentPage.Master.CurrentCaseNo; 
       else 
        throw new Exception("This page has no master page"); 
      } 
     } 
    } 

Выше «CurrentPage» не является действительным/действительным. Я просто написал, что там есть контекст.

Возможно ли это?

Спасибо! J

+0

Похоже, вы не делаете что-то правильно здесь, что именно вы пытаетесь получить от главной страницы? –

ответ

0

Я думаю, что вам нужно будет работать с чем-то, что взяло объект «страница» в качестве параметра, и оттуда вы могли бы определить, была ли страница, которая была передана, вашей главной страницей. И сделайте то, что вам нужно оттуда ....

Но это добавляет немного накладных расходов.

Реальный вопрос: вот чего вы пытаетесь избежать? Попытка избавиться от сеанса и перейти в viewstate?

+0

Да, альтернативой является переход на страницу в качестве параметра. Мы это рассмотрели, и это наш последний выбор. Да, мы пытаемся уйти от переменной сеанса. Благодарю. – Marc

2

Посмотрите на объект HttpContext.Current. Я считаю, что свойство Handler вернет текущую страницу. Было бы легче прочитать значение, хранящееся в сеансе, которое вытаскивает его из свойства, поскольку сеанс доступен с HttpContext.Current.

1

Опираясь на David's answer, это можно использовать статически в вашем приложении:

Page myPage = System.Web.HttpContext.Current.CurrentHandler as Page; 

if(myPage != null) 
    return ((MyMaster)myPage.Master).CurrentCaseNo;