Счетчик нажатий кнопок текстовое поле

#c# #html #asp.net

#c# #HTML #asp.net

Вопрос:

Я новичок в C # и Visual Studio, я начал изучать recently…at в тот момент, когда я пытаюсь создать одну кнопку, которая подсчитывает количество кликов, и текстовое поле, в которое вы можете ввести любое число, и оно будет отражено в счетчике кнопок при добавлении 1, прямо сейчас это работает, ноЯ хочу, чтобы кнопка добавляла 1 при каждом нажатии, вот мой код,

 using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace MainWeb1
{
    public partial class ButtonCounter : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            btn.Text = (TextBox1.Text);
            btn.Text = (Int32.Parse(btn.Text)   1 ) .ToString();
            
           

        }

        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            string var;
            var = TextBox1.Text;

        }
    }
}

  

Ответ №1:

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

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

Итак, вам нужно что-то, что отслеживает состояние вашего счетчика между каждым щелчком мыши. Существует множество возможностей, скрытых полей, статических переменных или переменных сеанса.

Возможный подход с использованием статической переменной:

 public partial class ButtonCounter : System.Web.UI.Page
{
    // keeps the count of the clicks on the button
    private static int btnCounter;

    protected void Page_Load(object sender, EventArgs e)
    {
        
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        btnCounter  ;
        Button btn = (Button)sender;
        btn.Text = (Int32.Parse(TextBox1.Text)   btnCounter ) .ToString();
    }
  

Но статические переменные имеют некоторые неприятные аспекты в ASP.NET приложения. Они являются общими для всех пользователей, поэтому новый пользователь увидит значение счетчика, полученное от кликов другого пользователя. Если по какой-либо причине серверу IIS необходимо повторно использовать пул приложений, статические переменные теряются, и они перезапускаются с 0.

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

     protected void Button1_Click(object sender, EventArgs e)
    {
        int btnCounter = 0;
        if(Session["counter"] != null)
            counter = Int32.Parse(Session["counter"]);
        counter  ;
        Session["counter"] = btnCounter;

        Button btn = (Button)sender;
        btn.Text = (Int32.Parse(TextBox1.Text)   btnCounter ) .ToString();
    }
  

Более простым решением является использование элемента управления HiddenField, в котором вы сохраняете счетчик и используете его более или менее так, как в примере сеанса выше.

     protected void Button1_Click(object sender, EventArgs e)
    {
        int btnCounter = Int32.Parse(hiddenCounter.Text);
        btnCounter  ;
        hiddenCounter.Text = btnCounter.ToString();

        Button btn = (Button)sender;
        btn.Text = (Int32.Parse(TextBox1.Text)   btnCounter ) .ToString();
    }
  

Это будет работать, потому что ASP.NET сохраняет состояние просмотра для всех элементов управления на вашей странице, повторно инициализируя их с предыдущими значениями (и это не так хорошо, как кажется, потому что это увеличивает информацию, которой необходимо обмениваться между сервером и клиентом)

Если вы действительно все еще хотите работать с ASP.NET крайне важно понимать, что ASP.NET Жизненный цикл страницы, но помните, что это устаревшая технология для Microsoft. Все новые улучшения относятся к ASP.NET Ядро и новые модели программирования, такие как ASP.NET MVC и ASP.NET Страницы с бритвой.