【问题标题】:Get id of triggered updatepanel only仅获取触发更新面板的 id
【发布时间】:2017-09-06 17:41:13
【问题描述】:

我的页面上有两个不同的更新面板,每个更新面板都由放置在不同中继器中的不同按钮触发,更新面板正常工作并避免冲突已经设置了他们的 UpdateMode="Conditional",但我无法确定触发的 updapanel 的 id

InitializeRequestEndRequest 事件中,我需要确定触发了哪个updatepanel,然后我可以在此updapanel 上指定一些客户端动画。

谢谢。

【问题讨论】:

    标签: javascript asp.net-ajax updatepanel pagerequestmanager


    【解决方案1】:

    所以经过所有研究,最佳实践如下所示:

    使用Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest)Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(InitializeRequest)

    我为所有触发器添加了一个数据属性,例如

    <asp:LinkButton Text="Detay" data-sid="PickAppToShow" CssClass="btn btn-default btn-sm" ID="lbtSelectApplication" runat="server" /></td>
    

    请求处理程序看起来像这样

        function InitializeRequest(sender, args) {
        try {
            var consernedObject = getAjaxObjectFromSender(sender);
            consernedObject.Start();
    
        }
        catch (e) {
            fn_ErrorLog(e);
        }
       };
    
    function EndRequest(sender, args) {
        try {
            var consernedObject = getAjaxObjectFromSender(sender);
            consernedObject.End();
    
        }
        catch (e) {
            fn_ErrorLog(e);
        }
    
    
    };
    

    辅助方法是这样的:

    function getAjaxObjectFromSender(sender) {
        var poster = sender._activeElement;
        if (poster == null) {
            return DefaultObject;
        }
        var posterSid = poster.getAttribute('data-sid');
        if (posterSid == null) {
            return DefaultObject;
        }
        var consernedObject = window[posterSid];
        if (consernedObject == null) {
            return DefaultObject;
        }
        return consernedObject;
    }
    

    诀窍现在开始,正如您在上面看到的 window[posterSid] 为您提供给定的命名 js 对象。如果你查看我的RequestHandlers;他们使用consernedObject.Start();consernedObject.End(); 这两种方法,这两种方法在另一个名为 AjaxObjects 的 js 文件中预定义。

    例如:

    var DefaultObject = {
        Start: function () {
            //When Progress Start    
            App.blockElement($(window), "Pleae wait");
        },
        End: function () {
            //When Progress End
            App.unblockElement($(window));
        }
    };
    
    var PickAppToShow = {
        Start: function () {
            //When Progress Start    
            App.blockElement($("#app-detail-content"), "Asking To Server");
        },
        End: function () {
            //When Progress End
            App.unblockElement($("#app-detail-content"));
        }
    };
    
    
    var PickMemberToDetail = {
        Start: function () {
            //When Progress Start    
            App.blockElement($(window), "Wait For It");
        },
        End: function () {
            //When Progress End
            $("#modal-MembershipDetail").modal("show");
            App.unblockElement($(window));
        }
    };
    

    这个方法已经解决了我所有的问题,但是我需要从服务器端获取一个参数,这可以通过使用hiddenField来实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多