Увеличение переменных в ASP.net по нажатию кнопки - PullRequest
1 голос
/ 10 октября 2009

Я новичок в asp.net. Я создаю сайт ASP.net с использованием VB.net. Итак, вот моя проблема

Dim myCounter as Integer = 0

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles Button1.Click

        myCounter =  myCounter + 1

        Label1.Text = myCounter.ToString()

end Sub

Как и ожидалось, я всегда получаю текст метки равным 0 каждый раз, когда нажимаю кнопку. Как создать глобальную переменную и увеличить ее.

Ответы [ 7 ]

4 голосов
/ 10 октября 2009

Каждый раз, когда страница отправляется обратно, она, по сути, начинается с нуля - например, все, что инициализируется значением 0, снова будет равно нулю. Это связано с тем, что сервер ничего не знает о последнем запуске страницы - все, что он знает, - это то, что вы нажали кнопку, которая отправляет форму на эту страницу, поэтому он создает другой экземпляр страницы и запускается снова.

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

Public Property MyCounter() As Integer
    Get
        Dim val As Object = ViewState("MyCounter")
        Return If(val IsNot Nothing, CInt(val), 0)
    End Get
    Set(ByVal value As Integer)
        ViewState("MyCounter") = value
    End Set
End Property

Также возможно использовать Session, который сохранит значение на всех страницах и запросы на время жизни сеанса пользователя. Чтобы это работало, вы можете использовать тот же пример выше, заменив ViewState на Session.

2 голосов
/ 07 октября 2012

Вставьте этот код в событие нажатия кнопки

int count=0;

count++;

ViewState["count"] = Convert.ToInt32(ViewState["count"]) + count;

Label1.Text = ViewState["count"].ToString();
1 голос
/ 10 октября 2009

Это еще один метод, который не использует скрытое поле, viewstate, сессию или кеш

Возможно, что-то не очень "безопасное", но, вероятно, сэкономит вам время.

Предполагая начальный Label1.Text = 0

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles Button1.Click

        Label1.Text = (Integer.Parse(Label1.Text) + 1).ToString()

end Sub
1 голос
/ 10 октября 2009

@ Rex M предлагает использовать Viewstate хорошо.

Если счетчик не является конфиденциальной информацией или что-то, о чем вы беспокоитесь из-за того, что кто-то вмешивается, вот более простая идея:

Вытакже можно использовать <asp:HiddenField> и сохранить значение там.Тогда он будет сохраняться между постбэками, и вы можете увеличивать его каждый раз ..

0 голосов
/ 12 августа 2015
   protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ViewState["Count"] = 0;
        }

    }

    protected void btnCount_Click(object sender, EventArgs e)
    {

        ViewState["Count"] = (int)(ViewState["Count"]) + 1;
        lblCount.Text = "Page Visited " +ViewState["Count"].ToString() +" times !";
        //Response.Write(ViewState["Count"].ToString());

    }
0 голосов
/ 04 апреля 2013

Вы можете использовать количество просмотров: ---

Код события button_click ..

ViewState["count"] = Convert.ToInt32(ViewState["count"])+1;
Label2.Text = "This button has been clicked " + ViewState["count"].ToString() + " times";
0 голосов
/ 10 октября 2009

класс вашей страницы воссоздается при каждом запросе ... поэтому myCounter не будет существовать в следующий раз.

вы можете либо

  • сделать myCounter статичным (не очень хорошая идея)
  • положить его в коллекцию Application, Session или Cache

зависит от того, что вы пытаетесь сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...