【问题标题】:Make Cursor Pointer Busy使光标指针忙
【发布时间】:2017-08-23 15:50:57
【问题描述】:

我的代码如下所示:

Protected Sub unearned_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles unearned_run.ServerClick
    Dim DataOut As String "a,b,c"
    unearned_span.InnerHtml = unearned_policytype.Value
    Response.Clear()
    Response.AddHeader("Content-Disposition", "attachment; filename=Unearned.csv")
    Response.ContentType = "application/octet-stream"

    Response.AddHeader("Content-Length", DataOut.Length())
    Response.Write(DataOut)
End Sub

和html:

<form id="form1" runat="server">
    <div id="unearnedreport" style="display:none">
        <input id="unearned_run" type="button" runat="server" value="Run Report" />
        <span id="unearned_span" runat="server"></span>
     </div>
</form>

我要解决的问题是,当报告运行时,我没有得到忙碌的指针。但是,如果将指针悬停在浏览器窗口的最底部,我会得到一个忙碌的指针;特别是在有菜单选择放大倍率的区域。

注意:我不是 Windows 程序员,所以如果你能在没有太多假设的情况下给出答案,我将不胜感激。

【问题讨论】:

  • unearned 点击上更改光标很容易。诀窍是让它恢复正常。由于您正在向客户端发送 CSV 文件而不是 html 页面,因此光标将无限期地继续为busy。一个可能的技巧是在 x 秒后将其更改回来,但如果下载时间更长,则无法检查并推迟更改。

标签: asp.net vb.net webforms


【解决方案1】:

您提到您不是“Windows 程序员”,但如果这是 Windows 而不是 Web,那么答案会很简单。 在windows中你会放置一行代码

Cursor.Current = Cursors.WaitCursor; //事件处理程序开始

Cursor.Current = Cursors.Default; //事件处理程序结束

但是在 asp.net webforms 环境中,您必须意识到浏览器上的单击事件会导致页面回传到服务器,然后您的代码在服务器上运行,然后在服务器上生成 html,并且仅当您的 Response.Write(DataOut) 完成时,服务器上的这个页面会被返回给客户端浏览器来呈现它。 所以你需要在实际的客户端浏览器中运行一些东西(只有javascript可以在客户端工作)来显示一个视觉提示,这个提示将继续显示,直到服务器完成并且你的响应页面开始在浏览器中显示。看C# Webforms show Loading indicator during code execution 如果您发现链接的示例有用,请赏金该用户(Dennis R)。

【讨论】:

  • 虽然默认情况下这得到了赏金,但我无法让它工作。我认为这是因为这专注于等待页面加载,而我正在等待文件下载。我不够聪明,无法适应它。我没有放弃。
【解决方案2】:

我们可以通过使用可以集成到 asp.net Webforms 中的 BlockUI 一个 Jquery 插件来实现这一点,您不仅可以在每个应用程序中使用它,它还可以用来等待用户直到操作完成.

以下是您集成到应用程序的方式:

  1. 在页面中添加 Jquery 和 Block UI 脚本标签

  2. UiBlock 类添加到您的unearned 按钮

  3. 添加以下脚本

       $('.UiBlock').click(function () {
            $('.blockMe').block({
    
                css: {
                    border: 'none',                          
                    backgroundColor: '#fff',
                    '-webkit-border-radius': '10px',
                    '-moz-border-radius': '10px',
                    opacity: .8,
                    color: '#000'
                }
            });
        });
    

在调用服务器代码之前的每次点击事件中,都会调用它,并在获取数据后将其关闭。

我们实施了它,也可以满足您的需求。

【讨论】:

  • 我试过这个,但它不起作用。如果它正在运行,我可以使用什么技术进行调试?我在函数的第一行添加了一个 alert(),但它没有触发。
  • 这是我在 DOM Explorer 中查看按钮时的样子:&lt;input name="unearned_run" class="UiBlock" id="unearned_run" onclick="__doPostBack('unearned_run','')" type="button" value="Run Report"&gt;
  • @MichaelPotter 我猜你是很久以后才来的 :),调试的一种方法是在你的 JS 代码中写 debugger 并且可以看到从控制台命中的断点。它应该可以在我们的项目中实施,如果需要我的支持 ping 我聊天将带您完成。
【解决方案3】:

您需要对 .net 的 javascript 异步库的引用,以及更新面板等附加代码才能让 .net 为您执行此操作,如果您确实想将其留给由此产生的所有 javascript 来执行此操作你。

您还需要将要处理的任何代码放入更新面板中。

这应该可以帮助您入门:

https://msdn.microsoft.com/en-us/library/bb386573.aspx

一旦您掌握了这一点,并且想要更改鼠标指针,而不是说显示“正在加载图像 gif”,您也可以这样做,但需要更多代码。

【讨论】:

    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 2012-02-07
    • 1970-01-01
    • 2018-08-31
    • 2010-12-13
    相关资源
    最近更新 更多