2012-02-28 3 views
1

Я в процессе преобразования классического ASP-приложения в ASP.Net и столкнулся с кирпичной стеной, чтобы делать с глобальными переменными (или переменными масштаба страницы). В качестве примечания, приложение не является типичным, поскольку оно не создает HTML. Вместо этого он получает запросы AJAX и возвращает строки JSON, поэтому он не использует много функций asp.net. Первый раз в течение долгого времени, что googling не привело меня к ответу!ASP.Net Global/Page Scope Variables

В коде осины мы используем ряд глобальных переменных, определенных в variables.asp, например:

<% 
dim lId 
%> 

Этот жерех затем включен на всех страницах. Существует ряд других файлов include, которые ссылаются на эти переменные, а также на сами страницы.

Для asp.net ближайший я могу найти, чтобы variables.aspx:

<SCRIPT LANGUAGE="VBScript" RunAt="Server"> 
shared dim lId as integer 
</SCRIPT> 

Однако, я понимаю, что эта переменная является гораздо более «глобальный», чем, как он работал в .asp, и что это может вызвать проблемы с потоками и т. д., и что они эффективно работают, как с использованием объекта Application(), и это не то, что мне нужно.

Фактически, мне нужно, чтобы иметь возможность объявлять переменную, на которую можно ссылаться в других включении, и на базовой странице, чья область/время жизни предназначено только для обработки этой страницы.

На этом этапе единственное, что я могу думать о том, чтобы использовать переменные сессии, а также, чтобы очистить их в конце каждой обработки, но я страшась работы/вопросы такого преобразования

+0

это приложение asp.net webforms или приложение asp.net mvc? – lomaxx

ответ

0

Вы могли бы создать класс в вашем проекте asp.net для хранения этих статических переменных. Если они являются параметрами конфигурации, они должны войти в файл web.config.

+0

Спасибо за быстрый ответ. Они не являются параметрами конфигурации, и они не являются статическими. Они используются для отслеживания идентификатора записи, которую вы изменяете, добавляете ли вы/изменяете/удаляете запись и т. Д., Все, что зависит от каждого сообщения. С созданием класса я экспериментировал кратко, но он стал цыпленком и яйцом - мне нужна глобальная переменная для хранения экземпляра класса? – Chudles

+0

Не похоже, что они являются глобальными переменными. Возможно, вы должны использовать viewstate для их хранения. – jmaglio

0

Похоже, что я мог бы в конечном итоге делает что-то вроде следующего:

shared dim gv as New GlobalVariables 

public class GlobalVariables 
    public property Id as integer 
     Get 
      Id = cint(HttpContext.Current.Items("id")) 
     End Get 
     set (ByVal aiValue as integer) 
      HttpContext.Current.Items("id") = aiValue 
     End Set 
    end property 
end class 

Тогда где я когда-либо в настоящее время ссылки «LID», мне нужно заменить «gv.Id».

gv по-прежнему будет глобальным, но учитывая, что он ищет в current.items У меня не должно быть проблем с потоком.