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" 应该是唯一的。我不确定当您使用相同的密钥两次调用它时会发生什么。