我正在使用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" />
答案 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的所有值(该参数)以识别每个值,然后应用您的逻辑。