javascript - 同时执行 javascript 和 asp.net 渲染

标签 javascript asp.net

假设我有一个.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 并从后面的代码更改标签吗?或者事物永远不会同时显示?

最佳答案

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

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

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

当页面由于回发(单击 POST 到服务器的按钮)而卸载时,显示 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";
        }
    }
}

关于javascript - 同时执行 javascript 和 asp.net 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14833252/

相关文章:

javascript - 在 JavaScript 和 Knockout.js 中,为什么我不能返回变量?为什么我必须像方法一样返回变量?

javascript - knockout JS : Checking if items in nested sortable were reordered

javascript - 我可以获取浏览器地址栏上的#value吗?

javascript - Java:从页面获取 JavaScript 数组元素

asp.net - 连接到 https ://webservice in asp. 网络应用程序

c# - 使用名称中的空格绑定(bind) DataItem

javascript - 未定义为 $ ("inputElement").val()

asp.net - CMS(Web 应用程序或 Windows 应用程序)

c# - 重载 2 个具有相同名称和相同参数类型的方法

c# - 为每个 Page_Load 运行代码