所以经过所有研究,最佳实践如下所示:
使用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来实现。