仅获取已触发的updatepanel的ID

时间:2017-09-06 17:41:14

标签: javascript asp.net-ajax updatepanel pagerequestmanager

我的页面上有两个不同的更新面板,每个都由不同的按钮触发,这些按钮位于不同的转发器中,updapenels正常工作并避免冲突我设置了 UpdateMode =“条件”,但我无法确定触发的updapanel的 ID

InitializeRequestEndRequest事件中,我需要确定哪个updatepanel已触发,然后我可以执行此updapanel上指定的客户端动画。

感谢名单。

1 个答案:

答案 0 :(得分:0)

因此,经过所有研究,最佳实践看起来像这样:

使用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来实现。