C # ASP.NET - переменная, которая доступна из любой функции и отличается от любого пользователя? - PullRequest
1 голос
/ 25 июня 2009

Мне нужна переменная, которая доступна из любой функции в моем коде, но отличается от всех пользователей.

так я написал:

public class classedelcappero
{
    private string frasehiragana = String.Empty;
    public string ohiragana
    {
        get
        {
            return frasehiragana;
        }
        set
        {
            frasehiragana = value;
        }
    }
}

и затем я вставил это в свою функцию:

protected void Page_Load(object sender, EventArgs e)
{
    classedelcappero chepalle = new classedelcappero();
    string frasehiragana = chepalle.ohiragana;
}

и это работает ... но если я получаю к нему доступ из другой функции, например

protected void ButtonRiprova_Click(object sender, EventArgs e)

значение пустое ... это нормально?

что делать? Использовать переменные сеанса?

Ответы [ 5 ]

3 голосов
/ 25 июня 2009

Это один из способов сделать это,

Создайте класс, производный от System.Web.UI.Page, и добавьте в него одно открытое свойство, оно будет выглядеть следующим образом.

    public class MyPage : System.Web.UI.Page
    {
            public string Frasehiragana
            {
                get
                {
                    try{
                    return HttpContext.Current.Application.Contents["_Frasehiragana"] as string;
                    }
                    catch
                    {
                          return null;
                    }
                }
                set
                {
                    HttpContext.Current.Application.Add("_Frasehiragana", value);
                }
            }
    }

Затем выведите все свои страницы asp.net из класса MyPage вместо System.Web.UI.Page, после этого код вашей страницы asp.net за классом может выглядеть следующим образом.

public partial class _Default : MyPage
.
.
.

Теперь вы можете использовать его следующим образом на всех ваших страницах.

this.Frasehiragana;

Спасибо

2 голосов
/ 25 июня 2009

Что значит доступ к нему из другой функции? Что именно вы получаете доступ? Вы делаете новый 'classdelcappero'?

Вы объявили только 'chepalle' и 'frasehiragana' в вашей Page_Load, поэтому их область действия заканчивается в конце этого метода. Наконец, вы не изменяете «frasehiragana» вашего экземпляра «chepalle» (вы просто устанавливаете новую строку), и даже если бы вы были, вы бы просто установили его на то, что уже есть по умолчанию (String.empty).

Одной из возможностей является наличие экземпляра classdelcappero внутри класса code-behind вашей страницы. Это устанавливается для Page_Load на основе свойства сеанса (cookie, IP-адрес, что-то, принадлежащее вашему пользователю, которое вы используете для их различения). Тогда любая функция может просто ссылаться на этот экземпляр, зная, что он уже правильно инициализирован.

Например:

class CodeBehind : Page
{
    private classdelcappero chepalle;
    protected void Page_Load(object sender, EventArgs e)
    {
        chepalle = new classedelcappero();
        chepalle.frasehiragana = ""; /* value based on user */
    }
}
2 голосов
/ 25 июня 2009

Для переменных, которые вы хотите привязать к конкретному пользователю, да, используйте переменные сеанса.

В вашем примере вы создаете объект со свойством, которое сразу теряется. Вам нужно будет где-то его сохранить и использовать повторно для доступа к его значению в методе ButtonRiprova_Click.

1 голос
/ 25 июня 2009

Возможно, вы захотите взглянуть на эту серию постов в блоге:

0 голосов
/ 25 июня 2009

Да, используйте переменную сеанса.

 string frasehiragana = chepalle.ohiragana;

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

Session["frasehiragana"]=chepalle.ohiragana;

или если вы устанавливаете его на каждой странице, тогда объявите, что vairable на уровне класса, а не в функции:

 string frasehiragana;
 protected void Page_Load(object sender, EventArgs e)
 {
     classedelcappero chepalle = new classedelcappero();
     string frasehiragana = chepalle.ohiragana;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...