簡體   English   中英

Apsx.net C# 防止頁面重新加載按鈕點擊

[英]Apsx.net C# Prevent Page reload on button click

希望你能幫忙。

我有一個 aspx web 應用程序,它有一個由 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;

                        }



                    }

            }
        }



    }

當我過濾視圖時,我有兩個結果並單擊編輯,頁面會重新加載。

有什么辦法可以阻止嗎?

可悲的是,當微軟發布框架時,他們認為 Web 應用程序應該像桌面應用程序一樣工作。 這個概念與構建 Web 應用程序的協議相沖突。 Web 應該體現無狀態架構,但微軟的 Web Form 框架是由狀態驅動的。

頁面生命周期

以上是頁面固有的工作方式。 因此,當您按下按鈕時,事件將被重新排序並執行。 在這種情況下,執行所謂的 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 方法和處理程序。

希望這提供了足夠的信息來幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM