Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальная переменная 
V
    Опции темы
GRIENDERS
Дата 6.10.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.2.2007

Репутация: 1
Всего: 1



Как создать глобальную переменную в 




Как создать глобальную переменную в ASP.NET?
Я пишу так: добавил класс Class1 в папку App_Code, в Global.asax написал так:
Код

public Class1 class1/* = new Class1()*/;
    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup

    }

Как теперь получить доступ к переменной class1 на странице Default.aspx? Так не катит
Код

 protected void Page_Load(object sender, EventArgs e)
    {
     class1 = new Class1();
  
    }

Статической переменная class1 быть не должна
    
PM MAIL   Вверх
Mymik
Дата 6.10.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



GRIENDERS, Судя по тому, что у тебя определение идет в Application_Start то я думаю тебе лучше всего сделать сразу переменную static для того чтобы она была доступна всем пользователям, а не только тому, кто первый вошел на сайт.
А для того чтобы она была доступна везде. Тебе нужно будет обрамить твой Global.asax в какой-нибудь класс с пространством имен. Я сделал вот так вот -->>
Код

<%@ Application Codebehind="Global.asax.cs" Inherits="TheraSimplicity.Web.Global" %>

Код

namespace TheraSimplicity.Web 
{
    /// <summary>
    /// Summary description for Global.
    /// </summary>
    public class Global : System.Web.HttpApplication
        {
            public static Class1 class1;
            /* Тут идут все методы */
        }
}

И получается, чтобы обратиться тебе надо будет написать -->>
Код

TheraSimplicity.Web.Global.class1;



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
tol05
Дата 6.10.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



для "глобальных" (т.е. доступных на уровне приложения) переменных существуют хранилища:
- HttpApplicationState (доступно на странице через Page.Application) - устаревший метод хранения
- Cache (Page.Cache) - рекомендуемый метод хранения
также эти объекты доступны через контекст. Юзать нужно их.
Код

//в global.asax
void Application_Start(object sender, EventArgs e) 
{
    Application.Add("class1", new Class1());
}
//на странице
 protected void Page_Load(object sender, EventArgs e)
{
    Class1 c1 = Application["class1"] as Class1;    
}

Но если ты хочешь именно через переменную в global.asax, то на странице доступ к ней можно будет получить через префикс ASP.global_asax и только если переменная будет статической. Такова селяви.
Код

//в global.asax
public static Class1 class1 = new new Class1();
void Application_Start(object sender, EventArgs e) 
{
   Class1 c1 = Asppplication["class1"] as Class1;
}
//на странице
 protected void Page_Load(object sender, EventArgs e)
{
    Class1 c1 = ASP.global_asax.class1;        
}



P.S. пока писал, увидел пост Mymik-а. Но все равно запостить решил. smile Mymik-у привет!


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
GRIENDERS
Дата 7.10.2007, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.2.2007

Репутация: 1
Всего: 1



Цитата

GRIENDERS, Судя по тому, что у тебя определение идет в Application_Start то я думаю тебе лучше всего сделать сразу переменную static для того чтобы она была доступна всем пользователям, а не только тому, кто первый вошел на сайт.

Не в  Application_Start, а до него. И переменная должна быть для каждого пользователя разная. Статическая не катит.
tol05, тоже катит, мне нужна переменная, которая будет создаваться на другой странице по определенному условию (т е ее может и не быть), а испоьзоваться будет например на Default.aspx и др. страницах
PM MAIL   Вверх
Mymik
Дата 7.10.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(GRIENDERS @  7.10.2007,  01:33 Найти цитируемый пост)
Не в  Application_Start, а до него. 
 smile это звучит примерно как -->> не до создания мира, а до него. smile 
Правда в asp.net есть Application_Init думаю он запускается перед Application_Start. 
Ну а т.к. тебе нужно для каждого пользователя своя переменна... я думаю лучше воспользоваться Session...
В Session_Start засовывать переменную в какой-нибудь ключ типа 
Код

Session["Default.aspx"] = new Class1();

А в коде на странице писать
Код

Class1 myClass = (Session["Default.aspx"] as Class1) ?? (new Class1());

поглащение null тут как раз для того, чтобы взять переменную по умолчанию.

А на другой странице определена или нет, это пофиг smile.

Цитата(tol05 @  6.10.2007,  13:50 Найти цитируемый пост)
P.S. пока писал, увидел пост Mymik-а. Но все равно запостить решил. smile Mymik-у привет! 
Ва-а-а !!!  smile всем цемки в этом чате smile


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
GRIENDERS
Дата 7.10.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.2.2007

Репутация: 1
Всего: 1



Цитата

В Session_Start засовывать переменную в какой-нибудь ключ типа 

Я же говорю
Цитата

мне нужна переменная, которая будет создаваться на другой странице по определенному условию (т е ее может и не быть) а испоьзоваться будет например на Default.aspx и др. страницах

Так что Session_Start тоже не катит.
А какое время жизни у сессии?
PM MAIL   Вверх
Mymik
Дата 7.10.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



GRIENDERS, так ты ж показывал исходники Global.asax вот я и думал, что оттуда надо скакать smile.
Ну коль на другой странице, так на другой странице.
А то, Session не работает что-ли на другой странице ??? у меня другая информация по этому поводу...
Создай объект, засунь его в сессию и работай с ним. А когда ты будешь доставать данные из сессии, то тебе будут возвращать null. Просто поставь проверки.
А время жизни сессии либо 20 минут (по умолчанию) либо настройки из web.config. Либо можешь руками настраивать в IIS


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
tol05
Дата 7.10.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



GRIENDERS, на другой странице, или нет - это нужно говорить сразу, иначе трудно понять, что значит "глобальная". Так бы и сказал - "переменная, доступная всему приложению", а так - только запутал нас обоих.
Юзай Cache или Application. Я уже говорил. Только с кэшом нужно еще не забыть настроить время устаревания на "никогда".

По поводу того, что переменная "может создастся, а может и нет" : на странице, которая "может требует ее, а может и нет"  smile проверяй, есть ли такая переменная в Cache или Application или нет. Если есть - юзай. Если нет - не юзай. 

Session не нужно использовать. Тогда будет еще меньше "глобальности".  smile 


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
D_F_V
Дата 8.10.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 27.3.2007
Где: Vladivostok

Репутация: нет
Всего: 1



как вариант, использовать профили...

Код

<profile enabled="true">
     <properties>            
           <add name="MyClassName" type="Class1" serializeAs="Binary"/>
     </properties>
</profile>



Код

     string Example = Profile.MyClassName.StaticMetodReturnString();






Это сообщение отредактировал(а) D_F_V - 8.10.2007, 01:00
PM MAIL ICQ MSN   Вверх
Mymik
Дата 8.10.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



tol05, Он говорил, что для каждого пользователя должна быть своя переменная ;) 
Цитата(GRIENDERS @  7.10.2007,  01:33 Найти цитируемый пост)
Не в  Application_Start, а до него. И переменная должна быть для каждого пользователя разная. Статическая не катит.
 Так что Cache и Application не катит smile


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
GRIENDERS
Дата 8.10.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.2.2007

Репутация: 1
Всего: 1



Че-то я не понял, тут есть какое-нить верное решение или нет?
PM MAIL   Вверх
Mymik
Дата 8.10.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



GRIENDERS, Session используй. Либо если у тебя есть Profile то лучше это дело там хранить.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
tol05
Дата 8.10.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Цитата(GRIENDERS @  7.10.2007,  01:33 Найти цитируемый пост)
И переменная должна быть для каждого пользователя разная

Блин, просмотрел...  smile 

GRIENDERS, согласен с Mymik-ом (в конце-концов, не ссориться же с модератором, правда? smile)
Делай через сессию. Профиль - не советую. Ты ее хранить для каждого юзера (вечно) не собираешься ведь?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
GRIENDERS
Дата 9.10.2007, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.2.2007

Репутация: 1
Всего: 1



Всем спасибо, разобрался
PM MAIL   Вверх
Keeper89
Дата 1.10.2010, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: нет
Всего: 58



Подниму тему, т.к. она похожа на мой случай.

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


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.1791 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.