Apsx.net C # Предотвращение перезагрузки страницы при нажатии кнопки

2

Надеюсь, вы можете помочь.

У меня есть веб-приложение aspx, в котором есть список, заполненный из SQlite, который хранится для мобильных номеров.

У меня есть кнопка, с помощью которой я могу включить/отключить текстовое поле - и все это работает.

Теперь, когда я фильтрую представление и нажимаю "Изменить", страница перезагружается.

Кнопка/текстовое поле динамически создается из SQLite.

          TextBox NES_editText = new TextBox();
                        NES_editText.CssClass = "editText";
                        NES_editText.Enabled = false;
                        NES_editText.Text = SQLReader["simName"].ToString();
                        NES_editText.ID = 300 + SQLReader["simNESID"].ToString();                            
                        Sim_Rows.Controls.Add(NES_editText);
                        Sim_Rows.Controls.Add(new LiteralControl("</div>")); // COL 2                                                    
                        Sim_Rows.Controls.Add(new LiteralControl("<div class=\"col col-3\" data-label=\"Edit Name\">"));
                        Button editButton = new Button();
                        editButton.CssClass = "editButton";
                        editButton.ID = SQLReader["simNESID"].ToString();                            
                        editButton.Click += new EventHandler(EditButton_Click);                         

                        Sim_Rows.Controls.Add(editButton);
                        Sim_Rows.Controls.Add(new LiteralControl("</div>")); // COL 3    

Вот мой код кнопки редактирования

private void EditButton_Click(object sender, EventArgs e)
    {
        Button NES_Edit = sender as Button;
        //TextBox NES_Text = new TextBox();

        String TxtID;

        //Response.Write(NES_Edit.ID);

            foreach (Control obj in Sim_Rows.Controls)
            {
                if (obj is TextBox)
                {
                    TxtID = obj.ID.Substring(3);
                    if (NES_Edit.ID == TxtID)  
                    {   
                        if (((TextBox)obj).Enabled == false)
                        {
                            ((TextBox)obj).Enabled = true;
                            ((TextBox)obj).Style.Add("border-bottom", "1px solid #000");
                            ((TextBox)obj).Style.Add("width", "270px");
                            NES_Edit.CssClass =  "button_enabled";
                            //Response.Write(NES_Edit.ID);
                            break;
                        }
                        else
                        {

                            ((TextBox)obj).Enabled = false;
                            ((TextBox)obj).Style.Remove("border-bottom");
                            NES_Edit.CssClass = "editButton";


                            SQL = "UPDATE Sims SET simName = @simName WHERE simNESID =" + NES_Edit.ID;

                            using (SQLiteConnection SQLCon = new SQLiteConnection(ConnectionString))
                            {

                                SQLiteCommand SQLCmd = new SQLiteCommand(SQL, SQLCon);
                                SQLCmd.Parameters.AddWithValue("@simName", ((TextBox)obj).Text );


                                try
                                {
                                    SQLCon.Open();
                                    SQLCmd.ExecuteNonQuery();

                                }
                                catch (SQLiteException Ex)
                                {
                                    Response.Write(Ex.Message);
                                }
                                SQLCon.Close();

                                // SEND EMAIL
                            }

                            break;

                        }



                    }

            }
        }



    }

Когда я фильтрую представление, и у меня есть два результата и нажимаю на редактирование, страница перезагружается.

Есть ли способ остановить это?

  • 0
    Я думаю, что это может быть то, что вы ищете: stackoverflow.com/questions/21325211/…
  • 0
    Вы пробовали UpdatePanel или традиционный Ajax с файлом обработчика? То, с чем вы боретесь, - это традиционный жизненный цикл веб-форм, вам следует провести исследование, потому что борьба с архитектурой вызовет проблемы в будущем.
Показать ещё 3 комментария
Теги:

1 ответ

2

К сожалению, когда Microsoft выпустила фреймворк, они поняли, что веб-приложение должно работать как настольное приложение. Это понятие противоречило протоколу, на котором построено веб-приложение. Сеть должна воплощать архитектуру без сохранения состояния, но структура Microsoft Web Form определяется состоянием.

Изображение 174551

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

Для борьбы с этой неприятностью Microsoft представила элемент управления, называемый UpdatePanel. Панель загрузит все состояние страницы в память, а после повторного рендеринга страницы отобразит измененную часть в элементе управления. Это позволяет архитектуре, управляемой состоянием, не передавать клиенту информацию о том, что сервер резервирует контент.

<asp:UpdatePanel id="upExample" runat="server">
     <ContentTemplate>
          <asp:Label id="lblExample" runat="server" Text="Initial Load."></asp:Label>
     </ContentTemplate>
</asp:UpdatePanel>

<asp:Button id="btnExample" runat="server" OnClick="UpdateLabel_Click" Text="Update" />

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

protected void UpdateLabel_Click(object sender, EventArgs e) => 
 lblExample.Text = $"Button clicked at: {DateTime.Now:MMMM dd, yyyy hh:mm:ss}";

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

Надеюсь, это даст вам достаточно информации, чтобы помочь вам.

  • 0
    Привет, Грег, это имеет смысл - я попробую и доложу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню