webforms : 确定 updatepanel 中的哪个控件触发刷新

Posted

技术标签:

【中文标题】webforms : 确定 updatepanel 中的哪个控件触发刷新【英文标题】:webforms : determines which control within updatepanel triggers the refresh 【发布时间】:2016-08-26 13:41:45 【问题描述】:

我有一个这样的 aspx 页面:

<asp:UpdatePanel runat="server" UpdateMode="always">
    <ContentTemplate>
        <asp:DropDownList autopostback="true" runat="server" ID="DropDown1" OnSelectedIndexChanged="DropDown1_SelectedIndexChanged">
        </asp:DropDownList>
        <asp:DropDownList autopostback="true" runat="server" ID="DropDown2" OnSelectedIndexChanged="DropDown2_SelectedIndexChanged">
        </asp:DropDownList>
    </ContentTemplate>
</asp:UpdatePanel>

在 2 个下拉列表中的任何一个中的每个 selectionChanged 处,都会完成部分回发,并且我会刷新 updatePanel 内容。但是,我只想在 DropDown1 的 selectionChanged 触发刷新面板后执行一些 js 代码。

我怎样才能在我的页面中进入客户端,在 updatePanel 刷新之后的事件,更重要的是,触发刷新面板的控件的 id(在本例中为 DropDown1)。

我试过这个,但每次加载页面时都会调用它,即使是第一次,我也不知道哪个控件触发了 updatePanel 刷新:

<script>
  $(document).ready(function () 
         
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded)
    );

    function PageLoaded(sender, args) 
        // I have analyzed sender and args without any information to obtain the desired id "DropDown1"
    

</script> 

【问题讨论】:

【参考方案1】:

您可以在 UpdatePanel 回发后使用sender._postBackSettings.sourceElement.id 获取源代码管理的 Id。请参阅下面的示例。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UpdatePanelTest.aspx.cs" Inherits="TestApp.UpdatePanelTest" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="/Scripts/jquery-1.8.2.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager runat="server" ID="sm" ></asp:ScriptManager>
    <div>
    <asp:UpdatePanel runat="server" UpdateMode="always">
        <ContentTemplate>
            <asp:DropDownList autopostback="true" runat="server" ID="DropDown1" OnSelectedIndexChanged="DropDown1_SelectedIndexChanged">
                <asp:ListItem Text="option 1" Value="1" />
                <asp:ListItem Text="option 2" Value="2" />
                <asp:ListItem Text="option 3" Value="3" />
            </asp:DropDownList>
            <asp:DropDownList autopostback="true" runat="server" ID="DropDown2" OnSelectedIndexChanged="DropDown2_SelectedIndexChanged">
                <asp:ListItem Text="option A" Value="A" />
                <asp:ListItem Text="option B" Value="B" />
                <asp:ListItem Text="option C" Value="C" />
            </asp:DropDownList>
        </ContentTemplate>
    </asp:UpdatePanel>
    </div>
    <script type="text/javascript">
        $(document).ready(function () 
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
                function (sender) 
                    if (sender._postBackSettings.sourceElement.id == 'DropDown1')
                        DoSomethingAmazing();
                );
        );

        function DoSomethingAmazing() 
            alert('OMG something amazing just occurred!');
        
    </script> 
    </form>
</body>
</html>

【讨论】:

以上是关于webforms : 确定 updatepanel 中的哪个控件触发刷新的主要内容,如果未能解决你的问题,请参考以下文章

UpdatePanel中点击按钮 Session过期跳转页面相关问题:Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消

C# UpdatePanel加载完毕回调JS

[jQuery]UpdatePanel更新后的连接事件

加载特定 UpdatePanel 后如何调用客户端 javascript 函数

JS公司/ASP.net:绑定到Javascript中的UpdatePanel&ŧ039;的更新事件

将 jQuery 用于 AJAX 与 ASP.NET Webforms [关闭]