Member 13396929 Ответов: 1

Как я помню, в C# гобал переменные через ASP.NET обратной передачи с реализации на AJAX?


У меня есть ASP.NET веб-сайт, который позволяет пользователю открыть изображение в ImageButton и нажать на него. Большинство переменных int и double являются глобальными, чтобы легко переходить между методами без слишком большого количества параметров. Глобальные переменные int включают размер изображения, numClicks (счетчик кликов), расстояние и расстояние бега. Глобальные двойные переменные включают коэффициент масштабирования (устанавливается в зависимости от размера изображения).

Событие OnClick для ImageButton обрабатывается методом C#
protected void Image_Click(object sender, ImageClickEventArgs e)
Метод вычисляет "реальное" расстояние между парой кликов путем деления расстояния между пикселями и деления его на статическое значение DotsPerInch и коэффициент масштабирования. Этот метод также выполняет увеличение расстояния бега каждый раз, когда происходит пара щелчков мыши. Существует также кнопка "Сброс", обрабатываемая методом C#
protected void Reset_It(object sender, EventArgs e)
который устанавливает расстояние бега и numClicks обратно в ноль.

Сначала я попытался сохранить переменные в состояниях сеанса, чтобы выжить при пересечении ASP.NET postback, но это быстро вышло из-под контроля, так как у меня есть около 20 переменных в общей сложности. Я узнал, что могу избежать обратной передачи с помощью реализаций Ajax. Мой вопрос заключается в том, как я могу использовать реализации Ajax с помощью ASP.NET методы обработчика C# OnClick?
Вот определение некоторых переменных
private int pos1x, pos1y = 0;
private int pos2x, pos2y = 0;
private int numClick = 0;
private int distx, disty = 0;
private int redistx, redisty, newdist = 0;
private int runningtotal = 0;
private double zoom = 1.0;


Вот метод Image_Click:
protected void pictureBox1_Click(object sender, MouseEventArgs e)
        {
                numClick++;

            if (numClick% 2 == 1)
            {
                pos1x = e.X;
                pos1y = e.Y;
                pt = new Point(pos1x,pos1y);
                rects.Add(new Rectangle(pt, new Size(20, 20)));
                pictureBox1.Invalidate();
            }
            else
            {
                pos2x = e.X; // mouseUp position
                pos2y = e.Y; //
                pt = new Point(pos2x,pos2y);
                rects.Add(new Rectangle(pt, new Size(10, 20)));
                pictureBox1.Invalidate();
                
                float distx = Math.Abs(pos2x - pos1x); // length of measurement
                float disty = Math.Abs(pos2y - pos1y);
                redistx = (int)(Math.Ceiling((float)(distx / (1 / zoom * Math.Floor(dpiX / 4.0)))));
                redisty = (int)(Math.Ceiling((float)(disty / (1 / zoom * Math.Floor(dpiY / 4.0)))));
                newdist = (int)(Math.Ceiling(Math.Sqrt((redistx * redistx + redisty * redisty))));
            }
       }

Вот метод Reset_It:
protected void resetCount_Click(object sender, EventArgs e)// reset count
       {
           numClick = 0;
           runningtotal = 0;
       }

Вот .aspx веб-элементы управления:
<asp:ImageButton ID="pic" runat="server" ImageAlign="Left" OnClick="Image_Click" />


<asp:Button ID="Resetter" runat="server" Text="Reset" Width="120px" OnClick="Reset_It"/>


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

protected void Page_Load(EventArgs e)
{
    Session["Variable"] = any variable;
}

1 Ответов

Рейтинг:
11

lw@zi

В чистом виде жерех.Чистый мир, вам нужно будет использовать UpdatePanel Элементы управления, которые должны выполнять обратную передачу, должны быть в нем. Вот Обзор Элемента Управления UpdatePanel[^] из MSDN.

Следование не является хорошим подходом для ASP.Net приложение веб-форм IMHO.

Вы также можете выбрать выполнение AJAX get/post через javascript/jquery. В этом случае вы можете обработать событие click на стороне клиента, выполнить вызов ajax и обновить пользовательский интерфейс по мере необходимости. Если вы используете jQuery, то доступна функция ajax. Вы можете взглянуть на это.


Member 13396929

Могу ли я выполнить эквивалентные функции Image_Click и Reset_It в Javascript без какой-либо обратной передачи? Переменные не должны входить в базу данных, потому что они применяются только к одной конкретной странице, так что это может помочь

lw@zi

Да. Вы можете сделать это в обработчиках событий щелчка на стороне клиента используя javascript