2013-02-12 41 views
1

假设我有一个.gif执行在同一时间javascript和asp.net渲染

<img alt="" src="./wait.gif" /> 

而且我有一个标签:

<asp:Label ID="tbnotif" runat="server" ReadOnly="True" Text="" ></asp:Label> 

和一个按钮:

<asp:Button ID="Button1" runat="server" Text="Pubblica" OnClientClick="show_table();add_gif();" OnCommand="Button1_Click" /> 

我正在使用aspx页面,问题是:

我可以点击按钮并在同一时间显示带有JavaScript的.gif,并将标签从代码后面更改?或者事情永远不会同时显示?

回答

0

它看起来像我想要显示回传之间繁忙的动画gif,是吗?

这里是我如何做到这一点(除非我正在使用它们有自己的进度指示器服务器控制更新面板)

<script type="text/javascript"> 
    window.onbeforeunload = function(){showGif();}; 
</script> 

当页面卸载,因为回发的(点击按钮,发送到服务器),揭示gif图像。当新页面从服务器返回时,图像将消失,因为它现在是一个新页面。

更改标签是一项小操作,因此请求/响应可能会很快转向,您可能永远无法看到图像。为了测试,你可以在你的按钮处理程序中添加一个System.Threading.Thread.Sleep(3000)来模拟一个更长的运行过程。

编辑

AJAX是您唯一的选择,但有许多方法。一个可能的解决方案:

将标签放在UpdatePanel服务器控件中,将按钮放置在更新面板之外,但在aspx页面的更新面板的声明标记中将其设置为AsyncPostbackTrigger。使用OnClientClick处理程序客户端显示gif或使用JQuery将客户端点击处理程序附加到按钮。

ASPX

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="AjaxLabel._Default" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager runat="server" ID="ScriptManager1"></asp:ScriptManager> 
    <div> 
     <asp:UpdatePanel runat="server"> 
      <ContentTemplate> 
       <asp:Label runat="server" ID="ajaxLabel">Initial value</asp:Label> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="asyncButton" EventName="Click" /> 
      </Triggers> 
     </asp:UpdatePanel> 

     <img id="theImage" src="img/success.png" style="display: none;" /> 

     <asp:Button runat="server" ID="asyncButton" Text="Client & Server Click" OnClientClick="showImage();" OnClick="asyncButton_Click" /> 

    </div> 
    </form> 

    <script type="text/javascript"> 

     function showImage() { 

      document.getElementById('theImage').style.display = "block"; 
     } 

    </script> 

</body> 
</html> 

aspx.cs

using System; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace AjaxLabel 
{ 
    public partial class Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void asyncButton_Click(object sender, EventArgs e) 
     { 
      ajaxLabel.Text = "Server-side value"; 
     } 
    } 
} 
+0

像你想显示回发之间繁忙的gif动画在我看来,是这样吗? 不...点击按钮我想要显示一个gif并更改一个标签,标签在服务器端更改后面的代码和gif与客户端..我认为他们将永远不会显示toghter ... – 2013-02-12 13:34:04

+0

答案可能是做一个Ajax请求对吗? – 2013-02-12 13:42:39

+0

是的AJAX然后,看我的编辑。 – 2013-02-12 13:56:55