Ext.net-MessageBox确认仅在整个for循环中显示一次

时间:2018-07-20 03:56:20

标签: c# asp.net ext.net

我正在使用Ext.net MessageBox确认来获得用户的确认, 每当他们想要更新记录时,在消息框中单击“是”。但是消息框仅显示一次for循环完成的时间。这是代码:

    foreach (DataRow row in dataTable.Rows)
    {
        foreach (DataColumn col in dataTable.Columns)
        {
            var item = row[col];

            // some code....

            RM.RegisterClientScriptBlock("confirm", "showResult();");

            if (hdfIsAgree.Text == "1")
            {
                hr_TimeSheetCodeServices.Update(item);
            }
        }
    }

这是客户端代码:

<script>
    var showResult = function () {
            Ext.Msg.confirm('Update', 'Do you want to update?', function (btn) {
                if (btn == "yes") {
                    hdfIsAgree.setValue('1');
                } else {
                    hdfIsAgree.setValue('0');
                }
            });
        }
</script>
<ext:Hidden runat="server" ID="hdfIsAgree" />

2 个答案:

答案 0 :(得分:0)

RegisterClientScriptBlock方法中的第一个参数是key,这意味着,如果第二次使用相同的键调用此方法,则第一个脚本将被更新;您将不会创建两个记录。像这样:

for (int i = 0; i < 3; i++)
   RM.RegisterClientScriptBlock("confirm", "showResult();");

int count = RM.ClientScriptBlockBag.Count; // 1

只会给您一个注册脚本。将密钥更改为唯一的密钥,以注册多个脚本:

for (int i = 0; i < 3; i++)
    RM.RegisterClientScriptBlock($"confirm-{i}", "showResult();");

int count = RM.ClientScriptBlockBag.Count; // 3

答案 1 :(得分:0)

在for循环中使用RM.RegisterClientScriptBlock("confirm", "showResult();");将用当前(最新)请求覆盖先前的请求。

因此,这仅适用于for循环的最后一个值,因此,由于所有先前的请求均被覆盖,因此该窗口仅显示一次。

尝试在客户端运行循环,将确认值保存在任何参数中,然后在服务器端同时发送具有特定ID的所有值(该参数)以识别每个值,然后应用您的逻辑。