【问题标题】:ASP.NET response after processing time处理时间后的 ASP.NET 响应
【发布时间】:2012-03-23 18:56:52
【问题描述】:

我现在遇到了一个相当棘手的问题。

我在 Visual Studio 2010 中使用 ASP.NET。现在,当用户单击按钮时,我有一个巨大的处理和网络集成要做。要点是响应需要很长时间(大约1-1.5分钟)。到那时,我必须告诉用户要有耐心,不要刷新页面。我尝试将其作为第一行按钮:

label.visible=true;//label 最初设置为不可见,并带有说明用户要耐心等待的文字。

运气不好!!!

接下来我也试过了 Response.Write("alert('请耐心等待')");

运气不好!!!

并不是这些语句没有执行。他们是!但实际上是在处理时间结束后完成的。即操作完成后告诉用户耐心等待!

我知道有一些称为自动回发的概念,但我找不到允许自动回发标签或指令的方法。谁能拯救我的一天???

【问题讨论】:

    标签: asp.net visual-studio visual-studio-2010 postback


    【解决方案1】:

    您可能需要查看客户端上的一些 javascript,它们在用户启动此过程时运行。如果(例如)您通过普通的 asp:Button 启动该过程,则输入类似...

    <asp:Button runat="server" id="btnInitiate" OnClientClick="document.lblPleaseWait.style.display='';return true;" Text="Initiate"/>
    <asp:Label runat="server" id="lblPleaseWait" style="display:none;">Please Wait</asp:Label>
    

    我对 jquery 一无所知,但我相信这会让您更好地访问 DOM 中的标签对象。

    您可能还想禁用 btnInitiate 按钮以阻止它们重复单击。为此,您需要调查 UseSubmitBehavior="false" 属性

    (另外,您误解了“autopostback”属性。这意味着控件 - 当更改/单击/等时 - 将自动将表单回发到服务器。这与响应无关 back 来自服务器。)

    【讨论】:

    • 工作得很好:) 谢谢你的回答
    【解决方案2】:

    如果,正如我猜的那样,您处于回发范式中,这意味着您触发了该进程,并且用户仅在 1 分钟后才获得第一个响应。或者。在这两者之间,您不能通过同一请求向用户发送任何内容。 一种解决方法是使用 ajax 触发事件,这样您就可以异步触发事件,向用户显示礼貌消息,然后等待响应。

    【讨论】:

      【解决方案3】:

      这就是你所要做的:

       <asp:Button ID="btnClick" OnClientClick="showMessage()" runat="server" Text="Click" onclick="btnClick_Click" />
       <span style="display:none;" id="lblMessage">Please be patient.</span> 
      

      showMessage()是javascript函数,应该改变lblMessage的显示风格:

      <script type="text/javascript">
          function showMessage() {
              document.getElementById('lblMessage').style.display = 'block';
          }
      </script>
      

      或者,也可以使用ASP.Net标签控件代替span,但必须将其ClientIdMode属性设置为Static:

      <style type="text/css">
      .InvisibleStyle
      {
          display: none;    
      }
      </style>
      
      <asp:Button ID="btnClick" OnClientClick="showMessage()" runat="server" Text="Click" onclick="btnClick_Click" />
      <asp:Label ID="lblMessage" runat="server" Text="Please be patient." ClientIDMode="Static" CssClass="InvisibleStyle" ></asp:Label>
      

      【讨论】:

      • 工作得很好:) 谢谢你的回答
      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 2018-01-30
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多