【问题标题】:How to show confirmation alert message box during loop in asp.net如何在asp.net循环期间显示确认警报消息框
【发布时间】:2021-11-15 13:53:03
【问题描述】:

在向数据表中添加新数据行的循环中,我想在特定条件下显示一个确认框。因此,如果用户选择“是”,该行将添加到表中或跳过并且循环将继续。为此,我使用了 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;
        }

    }

请帮助解决此问题或提出其他/最简单的方法。

【问题讨论】:

  • 哦,不,不要这样做。它将实现一个可怕的用户界面。您最好显示一个警告框,说“以下记录有问题 X,勾选每条记录旁边的复选框以声明是否应包含它,然后点击提交”.. 当您进行 Web 开发时,您应该分批思考“为用户提供解决所有问题所需的所有信息,并等待他们的统一回应”,然后还要平衡“一遍又一遍地提问的用户界面非常烦人” .." ..加上你的方法,如果他们犯了错误,就没有回头路了
  • 我同意 - 渲染网格 - 为每一行添加一个复选框,并说“接受”。这样,用户可以检查每一行,然后点击一个按钮确认,甚至点击取消按钮。让用户卡在循环提示中真的很糟糕 - 没有出路,更糟糕的是,这种方法对于 20 行来说简直就是地狱。
  • 同意你们两个,但这里的警报只会弹出 2 或 3 次,我需要知道弹出确认。请帮助我知道这一点。
  • 在该循环期间您无法与用户交互。网页在服务器上。您必须首先呈现页面,发送到客户端,然后您才能与用户交互。回帖上的网页会到达服务器。后面的代码与 PAGE 而不是用户交互。代码运行完成后,整个页面将传输到客户端。只有在整个页面向下移动到客户端浏览器后,您才必须开始提示过程。您的代码永远不能直接与用户交互。即使您可以/可以使其正常工作,您也必须先将页面发送给用户。

标签: c# asp.net


【解决方案1】:

如前所述,您需要让页面呈现 - 在页面创建过程中您不能与用户交互 - 只有在页面传递给用户之后,并且只有在页面传递给用户之后。

你最好这样做:

说出我们的网格 - 勾选复选框。

所以,标记是这样的:

<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 对话框)。因此,您可以有条件地提示用户 - 但只能在页面呈现客户端之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 2016-04-04
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多