c# - 如何在 ASP.NET C# 上处理 UpdateProgress 后触发 JavaScript 事件?

标签 c# javascript asp.net updatepanel updateprogress

我有一个网络表单,其中有一个 javascript 函数,可以评估它是否应该显示 div... 这是函数...

function viewCalendars()
            {
                if (document.getElementById('ddlDates').value == '5')
                {
                    document.getElementById('divSpecificDates').style.display = 'inline';
                }

                else
                {
                    document.getElementById('divSpecificDates').style.display = 'none';
                }

                return;
            }

我也将其添加到我的表单中

<body onload="viewCalendars();">
//Everything
</body>

因此,即使有回发,如果下拉列表选择了特定值,它也会显示 div。

但是,我最近添加了 updatepanel 和 updateprogress...现在我认为它们将不再起作用,因为不会发生回发。

这就是我现在拥有的...

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Consumptions.aspx.cs" Inherits="Station.Consumptions" %>
<%@ Register TagPrefix="ew" Namespace="eWorld.UI" Assembly="eWorld.UI, Version=1.9.0.0, Culture=neutral, PublicKeyToken=24d65337282035f2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>
            Lista De Consumos
        </title>

        <link href="css/Style.css" type="text/css" rel="stylesheet"/>

        <style type="text/css">
            #blur
            {
                width: 100%;
                background-color: black;
                moz-opacity: 0.5;
                khtml-opacity: .5;
                opacity: .5;
                filter: alpha(opacity=50);
                z-index: 120;
                height: 100%;
                position: absolute;
                top: 0;
                left: 0;
            }

            #progress
            {
                border: black 1px solid;
                padding: 5px;
                z-index: 100;                
                width: 250px;
                position: absolute;
                background-color: #fff;
                -moz-opacity: 0.75;
                font-family: Tahoma;
                font-size: 11px;
                font-weight: bold;
                text-align: center;
            }
        </style>

        <script type="text/javascript">
            function viewCalendars()
            {
                if (document.getElementById('ddlDates').value == '5')
                {
                    document.getElementById('divSpecificDates').style.display = 'inline';
                }

                else
                {
                    document.getElementById('divSpecificDates').style.display = 'none';
                }

                return;
            }
        </script>
    </head>

    <body onload="viewCalendars();">
        <form id="form1" runat="server">
            <asp:ScriptManager ID="sm" runat="server">
            </asp:ScriptManager>

            <asp:UpdateProgress ID="UpdateProgress1" runat="server">
                <ProgressTemplate>
                    <div id="blur">
                    </div>
                    <div id="progress">
                        <asp:Image ID="imgLoading" GenerateEmptyAlternateText="true" runat="server" ImageUrl="~/images/loading.gif" />
                    </div>
                </ProgressTemplate>
            </asp:UpdateProgress>

            <asp:UpdatePanel ID="upd" runat="server">
                <ContentTemplate>
                    <asp:DropDownList ID="ddlDates" CssClass="tbox" runat="server">
                    </asp:DropDownList>

                    <div runat="server" id="divSpecificDates" style="display: none; width: 100%; z-index: 1000;">
                    </div>

                    &nbsp;
                    <asp:Button Text="Filtrar" CssClass="btn" runat="server" ID="btnFilter" onclick="btnFilter_Click" />
                </ContentTemplate>

                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="btnFilter" EventName="Click" />
                </Triggers>
            </asp:UpdatePanel>
        </form>
    </body>
</html>

所以,我注意到,单击 btnFilter 按钮后,它的功能将被触发,同时 updateprogress 可见,但在它消失后(并且 btnFilter 功能完成) divSpecificDates 在应该可见时不可见。我想我必须在一切完成后调用 viewCalendars()...

我该如何以及在哪里调用这个函数?

更新: 我刚刚摆脱了 updateprogress...但它仍然无法正常工作,所以我想问题不存在...可能是在 updatepanel 上

最佳答案

当 UpdatePanel 更新时,DOM 会发生变化,并且您需要重新运行加载页面时所做的初始化。这是通过添加 UpdatePanel 时 asp.net 包含的 javascript 函数来完成的。因此,从正文中删除 onload 并使用 pageLoad

因此从这一行删除 onload

<body onload="viewCalendars();">

并添加此脚本

<script>
   function pageLoad() { 
      viewCalendars();
   }  
</script>  

类似how to keep javascripts after UpdatePanel partial postback
引用:Ajax Client Side Life Cycle Events

关于c# - 如何在 ASP.NET C# 上处理 UpdateProgress 后触发 JavaScript 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15395787/

相关文章:

javascript - 如何仅将文本框中的某些文本设置为只读,同时允许编辑其余文本

asp.net - 为什么我的网页控件为空?

c# - 创建特定的 JSON 格式

c# - 无法在私有(private)浏览器模式(隐身窗口)下运行 silverlight 应用程序

c# - 使用 C# 访问公共(public) Google 日历

c# - 升级到MVC 5和Web API 2后,如何使我的Web API应用再次运行?

c# - 从 CRM 门户 (2011) 保存相关属性(Lead_PhoneCall 事件)时出错?

c# - 模型更改后更新数据库 - Entity Framework 7

javascript - js中如何检测元素导航的状态?

javascript - 如何导出 Blender 模型以在 THREE.js 中显示颜色