Veeshal Mali Ответов: 2

Статическая переменная или проблема со статическим списком ?


Привет ,
Я использую статический список строк в своем asp.net (C#) код типа
private static List<string> newlist = new List<string>();

Теперь у меня есть одно текстовое поле, из которого я беру входную строку и добавляю в список по кнопке click like
protected void Button1_Click(object sender, EventArgs e)
   {
       newlist.Add(TextBox1.Text);
       TextBox1.Text = "";

   }

И на другом щелчке кнопки я показываю этот список на литеральном элементе управления с помощью цикла foreach вот так,
protected void Button2_Click(object sender, EventArgs e)
    {
        ltrList.Text = "";
        foreach(var l in newlist)
        {
            ltrList.Text += l.ToString() + "<br/>";
        }
    }


У меня есть хост этой страницы на сервере. Когда одновременно пользователи получают доступ к этой веб-форме и добавляют элементы в список, давая ввод из текстового поля, элементы отображаются друг другу обоим пользователям.
Предположим, что один пользователь добавляет "Veeshal "и добавляет в список, а другой пользователь добавляет" Amol " и добавляет в список. И когда они нажмут на show, оба пользователя получат все элементы из списка "Veeshal"и " Amol".
Я думаю, это из-за статики. Как решить эту проблему. Я не хочу показывать список предметов друг другу.

Что я уже пробовал:

Я пытался
охраняемых недействительными методе button2_click(объект отправителя, EventArgs в электронной)
{
ltrList.Текст = "";
foreach(var l в newlist)
{
ltrList.Text += l. ToString() + "
";
}
}

2 Ответов

Рейтинг:
8

Karthik_Mahalingam

В дополнение к вышеуказанному решению,

вы должны сделать это более простым способом, используя скрытое поле

создайте скрытый элемент управления полем в aspx

<asp:HiddenField ID="hdnfldList" runat="server" />

и вы должны добавить текст из textbox в литеральный элемент управления

protected void Button1_Click(object sender, EventArgs e)
       {
            ltrList.Text += TextBox1.Text + "<br/>";
            TextBox1.Text = "";

       }


Рейтинг:
19

OriginalGriff

Просто: не используйте static.
Проблема в том, что static переменные доступны для всех экземпляров класса в приложении, которые для веб-сайта могут быть (но могут и не быть) несколькими пользовательскими сеансами.
Вместо этого сохраните свой список в сеансе - в Page_Load вы проверяете, существует ли он, и извлекаете его, если он существует. Если это не так,вы создаете его. В любом случае, вы храните его как переменную экземпляра уровня класса, а не как переменную класса. static.
Когда вы закончите добавлять в него элементы, вы вернете его обратно в сеанс для следующего раза.