簡體   English   中英

如何在asp.net循環期間顯示確認警報消息框

[英]How to show confirmation alert message box during loop in asp.net

在添加到數據表中的新數據行的循環中,我想在特定條件下顯示一個確認框。 因此,如果用戶選擇“是”,該行將添加到表中或跳過並繼續循環。 為此,我使用了 ModalPopupExtender,但問題是只有在循環完成后才會彈出模態,這對我來說是無用的。

這是我的代碼:循環:

for(int i=0;i<dt2.Rows.count;i++)
{
 ....
 ....
 ....


        if (l > 0)
        {
             DataRow row = datarow1(dt2,dt3,i);                        
             dt3.Rows.Add(row);
        }
        else
        {
             ModalPopupExtender1.Show();
                if ((bool)ViewState["cnfirm"] == true)
                {
                     DataRow row = datarow1(dt2, dt3, i);
                     dt3.Rows.Add(row);
                }
                
        }
}

protected void Decision_Command(object sender, CommandEventArgs e)
    {
        if (e.CommandArgument == "Yes")
        {
            ViewState["cnfirm"] = true;
        }
        else
        {
            ViewState["cnfirm"] = false;
        }

    }

請幫助解決此問題或提出另一種/最簡單的方法。

如前所述,您需要讓頁面呈現 - 您不能在頁面創建過程中與用戶交互 - 只有在頁面向下傳遞給用戶之后,並且僅在頁面向下傳播之后。

你最好這樣做:

說我們的網格 - 放入一個復選框。

所以,標記是這樣的:

<div style="width:50%;padding:25px; margin-left: 40px;">

<asp:GridView ID="GVHotels" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="ID" CssClass="table"  >
    <Columns>
        <asp:BoundField DataField="FirstName"   HeaderText="FirstName" />
        <asp:BoundField DataField="LastName"    HeaderText="LastName"  />
        <asp:BoundField DataField="City"        HeaderText="City" />
        <asp:BoundField DataField="HotelName"   HeaderText="HotelName"  />
        <asp:BoundField DataField="Description" HeaderText="Description"  />

        <asp:TemplateField HeaderText="To Process" ItemStyle-HorizontalAlign="Center">
            <ItemTemplate>
                <asp:CheckBox ID="chkSel" runat="server" CssClass="bigcheck" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

    <asp:Button ID="cmdProcess" runat="server" Text="Process selected" CssClass="btn" Width="153px"  />
    <br />
    <br />

要填寫的代碼是這樣的:

   protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            LoadGrid();
    }

    void LoadGrid()
    {
        using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
        {
            using (SqlCommand cmdSQL = new SqlCommand("SELECT * from tblHotels ORDER by HotelName", conn))
            {
                conn.Open();
                DataTable rstData = new DataTable();
                rstData.Load(cmdSQL.ExecuteReader());
                GVHotels.DataSource = rstData;
                GVHotels.DataBind();
            }
        }
    }

輸出現在是這樣的:

在此處輸入圖片說明

現在檢查復選框是一個簡單的過程,如下所示:

   protected void cmdProcess_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow gRow in GVHotels.Rows)
        {
            CheckBox ckSel = (CheckBox)gRow.FindControl("chkSel");

            if (ckSel.Checked)
            {
                int PKID = (int)GVHotels.DataKeys[gRow.RowIndex]["ID"];

                // code here to process data based on database PKID
                Debug.Print("to process database PK ID = " + PKID);                    
            }
        }
    }

因此,您無法在循環期間與用戶交互 - 該循環正在服務器端運行,而瀏覽器正在等待整個頁面返回。 只有在所有代碼運行后,網頁的整個副本才會返回給客戶端。

您當然可以用按鈕替換復選框,並彈出一個很酷的對話框來詢問是/否,或者為每一行刪除它 - 但在該循環中沒有實用的方法來做到這一點。 所以,后面的代碼必須完成,必須退出,然后整個頁面才會被發送到客戶端。 一旦發生這種情況,您就可以開始與用戶進行交互。 如前所述,代替復選框,您可以放入一個按鈕 - 刪除它,還是刪除它? 這可以是漂亮的對話框(比如引導程序,或者更好的 jQuery.UI 對話框)。 所以你可以有條件地提示用戶 - 但只有在頁面呈現客戶端之后。

暫無
暫無

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

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