【问题标题】:Perform at same time javascript and asp.net rendering同时执行javascript和asp.net渲染
【发布时间】:2013-02-12 13:04:36
【问题描述】:

假设我有一个.gif:

<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 并从后面的代码中更改标签吗?还是永远不会同时显示事物?

【问题讨论】:

    标签: javascript asp.net


    【解决方案1】:

    在我看来,您想在回发之间显示一个忙碌的动画 gif,对吗?

    我是这样做的(除非我使用具有自己的进度指示器服务器控件的更新面板)

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

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

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

    编辑

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

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

    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";
            }
        }
    }
    

    【讨论】:

    • 在我看来你想在回发之间显示一个忙碌的动画 gif,对吗?不...在单击按钮上,我想显示一个 gif 并更改一个标签,标签在服务器端更改,代码在后面,gif 与客户端更改 .. 我认为它们永远不会显示更多 ...
    • 是的,我正在尝试这样的 jquery *.com/questions/348689/… 你认为它会起作用吗?
    • 是的,您链接到的 JQuery 方式也可以,实际上是一样的。
    • 我想为这个问题添加另一个解决方案,它是一个免费的 asp 库ajaxtutorials.com/ajax-control-toolkit-tutorials/…