BlockUI & Asp c# 不是 运行 代码的正确顺序?
BlockUI & Asp c# not running code in the right order?
每当我 运行 此代码时,块 UI 消息将在 "Opdater_Click" 已 运行 时首先显示。 (即使最后调用了 Unblock 也会卡在那里。
我试图在按下按钮时阻止我的 UI,当 UI 被阻止时,它正在设置数据源,完成后,UI应该解封了。
我试过设置超时,认为 Block 命令可能需要时间,但事实并非如此。
有人对问题可能有什么建议吗?
ASPX 文件中的 Javascript 代码
<script src="JavaScript/jquery-2.1.4.min.js"></script>
<script src="JavaScript/jquery.blockUI.js"></script>
<script type="text/javascript">
function block() { $.blockUI({ message: "halp" });}
function unblock() { $.bunlockUI();}
</script>
C#代码
protected void Opdater_Click(object sender, EventArgs e) {
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "sometihg", "block();", true);
Frontsite.DataSource = DL.GetWetmixBatches(calStart.SelectedDate, calStop.SelectedDate, null, null, null, null, null, null, null, null, null);
Frontsite.DataBind();
System.Diagnostics.Debug.WriteLine("Have no clue");
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "sometihg", "unblock();", true);
}
好的,首先,在服务器端执行此操作并不能得到您想要的结果。
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "sometihg", "block();", true);
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "sometihg", "unblock();", true);
这只是意味着当服务器完成 Opdater_Click 功能时,他将非常快速地阻止所有内容,然后再次取消阻止。这没有用。您应该自己从 html/javascript 触发 block() 函数。
请记住,C# 代码是在服务器上执行的,只有当它完成时,它 return 才会发送给浏览器。所以这将有效 return: "block();unblock()",这不是你想要的,因为你的用户可以一直点击按钮直到服务器端操作 returns.
我认为只需将阻止功能移至 HTML/Javascript 即可解决您的问题。只有在服务器端操作完成后才具有解锁功能运行是可以的。
例如,您可以使用 jQuery 来做到这一点。
$( "#target" ).click(function() {
block();
});
编辑
此外,我认为它首先不起作用,因为您使用相同的密钥调用了 RegisterClientScriptBlock 两次。 "sometigh" 应该是唯一的。我不确定当您使用相同的密钥两次调用它时会发生什么。
每当我 运行 此代码时,块 UI 消息将在 "Opdater_Click" 已 运行 时首先显示。 (即使最后调用了 Unblock 也会卡在那里。
我试图在按下按钮时阻止我的 UI,当 UI 被阻止时,它正在设置数据源,完成后,UI应该解封了。
我试过设置超时,认为 Block 命令可能需要时间,但事实并非如此。
有人对问题可能有什么建议吗?
ASPX 文件中的 Javascript 代码
<script src="JavaScript/jquery-2.1.4.min.js"></script>
<script src="JavaScript/jquery.blockUI.js"></script>
<script type="text/javascript">
function block() { $.blockUI({ message: "halp" });}
function unblock() { $.bunlockUI();}
</script>
C#代码
protected void Opdater_Click(object sender, EventArgs e) {
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "sometihg", "block();", true);
Frontsite.DataSource = DL.GetWetmixBatches(calStart.SelectedDate, calStop.SelectedDate, null, null, null, null, null, null, null, null, null);
Frontsite.DataBind();
System.Diagnostics.Debug.WriteLine("Have no clue");
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "sometihg", "unblock();", true);
}
好的,首先,在服务器端执行此操作并不能得到您想要的结果。
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "sometihg", "block();", true);
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "sometihg", "unblock();", true);
这只是意味着当服务器完成 Opdater_Click 功能时,他将非常快速地阻止所有内容,然后再次取消阻止。这没有用。您应该自己从 html/javascript 触发 block() 函数。 请记住,C# 代码是在服务器上执行的,只有当它完成时,它 return 才会发送给浏览器。所以这将有效 return: "block();unblock()",这不是你想要的,因为你的用户可以一直点击按钮直到服务器端操作 returns.
我认为只需将阻止功能移至 HTML/Javascript 即可解决您的问题。只有在服务器端操作完成后才具有解锁功能运行是可以的。
例如,您可以使用 jQuery 来做到这一点。
$( "#target" ).click(function() {
block();
});
编辑
此外,我认为它首先不起作用,因为您使用相同的密钥调用了 RegisterClientScriptBlock 两次。 "sometigh" 应该是唯一的。我不确定当您使用相同的密钥两次调用它时会发生什么。