[英]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.