如何在updatepanel中的异步回发后推迟客户端的更新

时间:2016-05-15 11:25:05

标签: c# asp.net .net ajax updatepanel

我有一个使用UpdatePanels asp.net

的旧系统

postback完成后,我们知道UpdatePanel的内部已更新

我可以在客户端以某种方式延迟此更新吗?那可能吗?

因此,当postback启动时,我会在客户端设置javascript datetime object

完成postback后,从服务器返回data,在更新client side interface之前,我会检查已经过了多少毫秒并且我延迟客户端的更新,直到经过一定的几毫秒

这可能吗?

asp.net 4.5 c#

让我澄清一下

我希望在ajax回发请求开始后,页面的每次更新都正好是500毫秒

然而,服务器延迟是未知的,并且每个位置都会发生变化

假设对于人1,服务器延迟是122毫秒

对于人2,服务器延迟是234

对于人3,服务器延迟是444

所以我不得不在客户端延迟页面更新

为此人1:378毫秒

为此人2:266 ms

为人3:56 ms

我已经检查过,我发现有一个功能:

Sys.WebForms.PageRequestManager pageLoading Event

所以如果我能以某种方式覆盖此函数调用的函数来更新我可以实现的页面

我还不知道它调用什么功能来完成客户端的更新操作

让我们假设在里面

Sys.WebForms.PageRequestManager pageLoading Event 

updateTheChanges函数被称为

所以,如果我可以覆盖这个updateTheChanges函数并延迟调用它,我可以达到我想要的效果

我需要这样的内容,它将覆盖updatepanel的更新功能。所以我可以延迟调用这个函数

ASP.Net Webforms w/ AJAX Slow Rendering

TY

此处是网络资源文件

  1. 脚本资源1:http://pastebin.com/0rSCMn3g
  2. 脚本资源2:http://pastebin.com/GvqwpPv8
  3. 下面的脚本资源3

        function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit) {
        this.eventTarget = eventTarget;
        this.eventArgument = eventArgument;
        this.validation = validation;
        this.validationGroup = validationGroup;
        this.actionUrl = actionUrl;
        this.trackFocus = trackFocus;
        this.clientSubmit = clientSubmit;
    }
    
    function WebForm_DoPostBackWithOptions(options) {
        var validationResult = true;
        if (options.validation) {
            if (typeof(Page_ClientValidate) == 'function') {
                validationResult = Page_ClientValidate(options.validationGroup);
            }
        }
        if (validationResult) {
            if ((typeof(options.actionUrl) != "undefined") && (options.actionUrl != null) && (options.actionUrl.length > 0)) {
                theForm.action = options.actionUrl;
            }
            if (options.trackFocus) {
                var lastFocus = theForm.elements["__LASTFOCUS"];
                if ((typeof(lastFocus) != "undefined") && (lastFocus != null)) {
                    if (typeof(document.activeElement) == "undefined") {
                        lastFocus.value = options.eventTarget;
                    } else {
                        var active = document.activeElement;
                        if ((typeof(active) != "undefined") && (active != null)) {
                            if ((typeof(active.id) != "undefined") && (active.id != null) && (active.id.length > 0)) {
                                lastFocus.value = active.id;
                            } else if (typeof(active.name) != "undefined") {
                                lastFocus.value = active.name;
                            }
                        }
                    }
                }
            }
        }
        if (options.clientSubmit) {
            __doPostBack(options.eventTarget, options.eventArgument);
        }
    }
    var __pendingCallbacks = new Array();
    var __synchronousCallBackIndex = -1;
    
    function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {
        var postData = __theFormPostData +
            "__CALLBACKID=" + WebForm_EncodeCallback(eventTarget) +
            "&__CALLBACKPARAM=" + WebForm_EncodeCallback(eventArgument);
        if (theForm["__EVENTVALIDATION"]) {
            postData += "&__EVENTVALIDATION=" + WebForm_EncodeCallback(theForm["__EVENTVALIDATION"].value);
        }
        var xmlRequest, e;
        try {
            xmlRequest = new XMLHttpRequest();
        } catch (e) {
            try {
                xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
        var setRequestHeaderMethodExists = true;
        try {
            setRequestHeaderMethodExists = (xmlRequest && xmlRequest.setRequestHeader);
        } catch (e) {}
        var callback = new Object();
        callback.eventCallback = eventCallback;
        callback.context = context;
        callback.errorCallback = errorCallback;
        callback.async = useAsync;
        var callbackIndex = WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);
        if (!useAsync) {
            if (__synchronousCallBackIndex != -1) {
                __pendingCallbacks[__synchronousCallBackIndex] = null;
            }
            __synchronousCallBackIndex = callbackIndex;
        }
        if (setRequestHeaderMethodExists) {
            xmlRequest.onreadystatechange = WebForm_CallbackComplete;
            callback.xmlRequest = xmlRequest;
            // e.g. http:
            var action = theForm.action || document.location.pathname,
                fragmentIndex = action.indexOf('#');
            if (fragmentIndex !== -1) {
                action = action.substr(0, fragmentIndex);
            }
            if (!__nonMSDOMBrowser) {
                var queryIndex = action.indexOf('?');
                if (queryIndex !== -1) {
                    var path = action.substr(0, queryIndex);
                    if (path.indexOf("%") === -1) {
                        action = encodeURI(path) + action.substr(queryIndex);
                    }
                } else if (action.indexOf("%") === -1) {
                    action = encodeURI(action);
                }
            }
            xmlRequest.open("POST", action, true);
            xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
            xmlRequest.send(postData);
            return;
        }
        callback.xmlRequest = new Object();
        var callbackFrameID = "__CALLBACKFRAME" + callbackIndex;
        var xmlRequestFrame = document.frames[callbackFrameID];
        if (!xmlRequestFrame) {
            xmlRequestFrame = document.createElement("IFRAME");
            xmlRequestFrame.width = "1";
            xmlRequestFrame.height = "1";
            xmlRequestFrame.frameBorder = "0";
            xmlRequestFrame.id = callbackFrameID;
            xmlRequestFrame.name = callbackFrameID;
            xmlRequestFrame.style.position = "absolute";
            xmlRequestFrame.style.top = "-100px"
            xmlRequestFrame.style.left = "-100px";
            try {
                if (callBackFrameUrl) {
                    xmlRequestFrame.src = callBackFrameUrl;
                }
            } catch (e) {}
            document.body.appendChild(xmlRequestFrame);
        }
        var interval = window.setInterval(function() {
            xmlRequestFrame = document.frames[callbackFrameID];
            if (xmlRequestFrame && xmlRequestFrame.document) {
                window.clearInterval(interval);
                xmlRequestFrame.document.write("");
                xmlRequestFrame.document.close();
                xmlRequestFrame.document.write('<html><body><form method="post"><input type="hidden" name="__CALLBACKLOADSCRIPT" value="t"></form></body></html>');
                xmlRequestFrame.document.close();
                xmlRequestFrame.document.forms[0].action = theForm.action;
                var count = __theFormPostCollection.length;
                var element;
                for (var i = 0; i < count; i++) {
                    element = __theFormPostCollection[i];
                    if (element) {
                        var fieldElement = xmlRequestFrame.document.createElement("INPUT");
                        fieldElement.type = "hidden";
                        fieldElement.name = element.name;
                        fieldElement.value = element.value;
                        xmlRequestFrame.document.forms[0].appendChild(fieldElement);
                    }
                }
                var callbackIdFieldElement = xmlRequestFrame.document.createElement("INPUT");
                callbackIdFieldElement.type = "hidden";
                callbackIdFieldElement.name = "__CALLBACKID";
                callbackIdFieldElement.value = eventTarget;
                xmlRequestFrame.document.forms[0].appendChild(callbackIdFieldElement);
                var callbackParamFieldElement = xmlRequestFrame.document.createElement("INPUT");
                callbackParamFieldElement.type = "hidden";
                callbackParamFieldElement.name = "__CALLBACKPARAM";
                callbackParamFieldElement.value = eventArgument;
                xmlRequestFrame.document.forms[0].appendChild(callbackParamFieldElement);
                if (theForm["__EVENTVALIDATION"]) {
                    var callbackValidationFieldElement = xmlRequestFrame.document.createElement("INPUT");
                    callbackValidationFieldElement.type = "hidden";
                    callbackValidationFieldElement.name = "__EVENTVALIDATION";
                    callbackValidationFieldElement.value = theForm["__EVENTVALIDATION"].value;
                    xmlRequestFrame.document.forms[0].appendChild(callbackValidationFieldElement);
                }
                var callbackIndexFieldElement = xmlRequestFrame.document.createElement("INPUT");
                callbackIndexFieldElement.type = "hidden";
                callbackIndexFieldElement.name = "__CALLBACKINDEX";
                callbackIndexFieldElement.value = callbackIndex;
                xmlRequestFrame.document.forms[0].appendChild(callbackIndexFieldElement);
                xmlRequestFrame.document.forms[0].submit();
            }
        }, 10);
    }
    
    function WebForm_CallbackComplete() {
        for (var i = 0; i < __pendingCallbacks.length; i++) {
            callbackObject = __pendingCallbacks[i];
            if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) {
                if (!__pendingCallbacks[i].async) {
                    __synchronousCallBackIndex = -1;
                }
                __pendingCallbacks[i] = null;
                var callbackFrameID = "__CALLBACKFRAME" + i;
                var xmlRequestFrame = document.getElementById(callbackFrameID);
                if (xmlRequestFrame) {
                    xmlRequestFrame.parentNode.removeChild(xmlRequestFrame);
                }
                WebForm_ExecuteCallback(callbackObject);
            }
        }
    }
    
    function WebForm_ExecuteCallback(callbackObject) {
        var response = callbackObject.xmlRequest.responseText;
        if (response.charAt(0) == "s") {
            if ((typeof(callbackObject.eventCallback) != "undefined") && (callbackObject.eventCallback != null)) {
                callbackObject.eventCallback(response.substring(1), callbackObject.context);
            }
        } else if (response.charAt(0) == "e") {
            if ((typeof(callbackObject.errorCallback) != "undefined") && (callbackObject.errorCallback != null)) {
                callbackObject.errorCallback(response.substring(1), callbackObject.context);
            }
        } else {
            var separatorIndex = response.indexOf("|");
            if (separatorIndex != -1) {
                var validationFieldLength = parseInt(response.substring(0, separatorIndex));
                if (!isNaN(validationFieldLength)) {
                    var validationField = response.substring(separatorIndex + 1, separatorIndex + validationFieldLength + 1);
                    if (validationField != "") {
                        var validationFieldElement = theForm["__EVENTVALIDATION"];
                        if (!validationFieldElement) {
                            validationFieldElement = document.createElement("INPUT");
                            validationFieldElement.type = "hidden";
                            validationFieldElement.name = "__EVENTVALIDATION";
                            theForm.appendChild(validationFieldElement);
                        }
                        validationFieldElement.value = validationField;
                    }
                    if ((typeof(callbackObject.eventCallback) != "undefined") && (callbackObject.eventCallback != null)) {
                        callbackObject.eventCallback(response.substring(separatorIndex + validationFieldLength + 1), callbackObject.context);
                    }
                }
            }
        }
    }
    
    function WebForm_FillFirstAvailableSlot(array, element) {
        var i;
        for (i = 0; i < array.length; i++) {
            if (!array[i]) break;
        }
        array[i] = element;
        return i;
    }
    var __nonMSDOMBrowser = (window.navigator.appName.toLowerCase().indexOf('explorer') == -1);
    var __theFormPostData = "";
    var __theFormPostCollection = new Array();
    var __callbackTextTypes = /^(text|password|hidden|search|tel|url|email|number|range|color|datetime|date|month|week|time|datetime-local)$/i;
    
    function WebForm_InitCallback() {
        var formElements = theForm.elements,
            count = formElements.length,
            element;
        for (var i = 0; i < count; i++) {
            element = formElements[i];
            var tagName = element.tagName.toLowerCase();
            if (tagName == "input") {
                var type = element.type;
                if ((__callbackTextTypes.test(type) || ((type == "checkbox" || type == "radio") && element.checked)) && (element.id != "__EVENTVALIDATION")) {
                    WebForm_InitCallbackAddField(element.name, element.value);
                }
            } else if (tagName == "select") {
                var selectCount = element.options.length;
                for (var j = 0; j < selectCount; j++) {
                    var selectChild = element.options[j];
                    if (selectChild.selected == true) {
                        WebForm_InitCallbackAddField(element.name, element.value);
                    }
                }
            } else if (tagName == "textarea") {
                WebForm_InitCallbackAddField(element.name, element.value);
            }
        }
    }
    
    function WebForm_InitCallbackAddField(name, value) {
        var nameValue = new Object();
        nameValue.name = name;
        nameValue.value = value;
        __theFormPostCollection[__theFormPostCollection.length] = nameValue;
        __theFormPostData += WebForm_EncodeCallback(name) + "=" + WebForm_EncodeCallback(value) + "&";
    }
    
    function WebForm_EncodeCallback(parameter) {
        if (encodeURIComponent) {
            return encodeURIComponent(parameter);
        } else {
            return escape(parameter);
        }
    }
    var __disabledControlArray = new Array();
    
    function WebForm_ReEnableControls() {
        if (typeof(__enabledControlArray) == 'undefined') {
            return false;
        }
        var disabledIndex = 0;
        for (var i = 0; i < __enabledControlArray.length; i++) {
            var c;
            if (__nonMSDOMBrowser) {
                c = document.getElementById(__enabledControlArray[i]);
            } else {
                c = document.all[__enabledControlArray[i]];
            }
            if ((typeof(c) != "undefined") && (c != null) && (c.disabled == true)) {
                c.disabled = false;
                __disabledControlArray[disabledIndex++] = c;
            }
        }
        setTimeout("WebForm_ReDisableControls()", 0);
        return true;
    }
    
    function WebForm_ReDisableControls() {
        for (var i = 0; i < __disabledControlArray.length; i++) {
            __disabledControlArray[i].disabled = true;
        }
    }
    
    function WebForm_SimulateClick(element, event) {
        var clickEvent;
        if (element) {
            if (element.click) {
                element.click();
            } else {
                clickEvent = document.createEvent("MouseEvents");
                clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                if (!element.dispatchEvent(clickEvent)) {
                    return true;
                }
            }
            event.cancelBubble = true;
            if (event.stopPropagation) {
                event.stopPropagation();
            }
            return false;
        }
        return true;
    }
    
    function WebForm_FireDefaultButton(event, target) {
        if (event.keyCode == 13) {
            var src = event.srcElement || event.target;
            if (src &&
                ((src.tagName.toLowerCase() == "input") &&
                    (src.type.toLowerCase() == "submit" || src.type.toLowerCase() == "button")) ||
                ((src.tagName.toLowerCase() == "a") &&
                    (src.href != null) && (src.href != "")) ||
                (src.tagName.toLowerCase() == "textarea")) {
                return true;
            }
            var defaultButton;
            if (__nonMSDOMBrowser) {
                defaultButton = document.getElementById(target);
            } else {
                defaultButton = document.all[target];
            }
            if (defaultButton) {
                return WebForm_SimulateClick(defaultButton, event);
            }
        }
        return true;
    }
    
    function WebForm_GetScrollX() {
        if (__nonMSDOMBrowser) {
            return window.pageXOffset;
        } else {
            if (document.documentElement && document.documentElement.scrollLeft) {
                return document.documentElement.scrollLeft;
            } else if (document.body) {
                return document.body.scrollLeft;
            }
        }
        return 0;
    }
    
    function WebForm_GetScrollY() {
        if (__nonMSDOMBrowser) {
            return window.pageYOffset;
        } else {
            if (document.documentElement && document.documentElement.scrollTop) {
                return document.documentElement.scrollTop;
            } else if (document.body) {
                return document.body.scrollTop;
            }
        }
        return 0;
    }
    
    function WebForm_SaveScrollPositionSubmit() {
        if (__nonMSDOMBrowser) {
            theForm.elements['__SCROLLPOSITIONY'].value = window.pageYOffset;
            theForm.elements['__SCROLLPOSITIONX'].value = window.pageXOffset;
        } else {
            theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();
            theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();
        }
        if ((typeof(this.oldSubmit) != "undefined") && (this.oldSubmit != null)) {
            return this.oldSubmit();
        }
        return true;
    }
    
    function WebForm_SaveScrollPositionOnSubmit() {
        theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();
        theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();
        if ((typeof(this.oldOnSubmit) != "undefined") && (this.oldOnSubmit != null)) {
            return this.oldOnSubmit();
        }
        return true;
    }
    
    function WebForm_RestoreScrollPosition() {
        if (__nonMSDOMBrowser) {
            window.scrollTo(theForm.elements['__SCROLLPOSITIONX'].value, theForm.elements['__SCROLLPOSITIONY'].value);
        } else {
            window.scrollTo(theForm.__SCROLLPOSITIONX.value, theForm.__SCROLLPOSITIONY.value);
        }
        if ((typeof(theForm.oldOnLoad) != "undefined") && (theForm.oldOnLoad != null)) {
            return theForm.oldOnLoad();
        }
        return true;
    }
    
    function WebForm_TextBoxKeyHandler(event) {
        if (event.keyCode == 13) {
            var target;
            if (__nonMSDOMBrowser) {
                target = event.target;
            } else {
                target = event.srcElement;
            }
            if ((typeof(target) != "undefined") && (target != null)) {
                if (typeof(target.onchange) != "undefined") {
                    target.onchange();
                    event.cancelBubble = true;
                    if (event.stopPropagation) event.stopPropagation();
                    return false;
                }
            }
        }
        return true;
    }
    
    function WebForm_TrimString(value) {
        return value.replace(/^\s+|\s+$/g, '')
    }
    
    function WebForm_AppendToClassName(element, className) {
        var currentClassName = ' ' + WebForm_TrimString(element.className) + ' ';
        className = WebForm_TrimString(className);
        var index = currentClassName.indexOf(' ' + className + ' ');
        if (index === -1) {
            element.className = (element.className === '') ? className : element.className + ' ' + className;
        }
    }
    
    function WebForm_RemoveClassName(element, className) {
        var currentClassName = ' ' + WebForm_TrimString(element.className) + ' ';
        className = WebForm_TrimString(className);
        var index = currentClassName.indexOf(' ' + className + ' ');
        if (index >= 0) {
            element.className = WebForm_TrimString(currentClassName.substring(0, index) + ' ' +
                currentClassName.substring(index + className.length + 1, currentClassName.length));
        }
    }
    
    function WebForm_GetElementById(elementId) {
        if (document.getElementById) {
            return document.getElementById(elementId);
        } else if (document.all) {
            return document.all[elementId];
        } else return null;
    }
    
    function WebForm_GetElementByTagName(element, tagName) {
        var elements = WebForm_GetElementsByTagName(element, tagName);
        if (elements && elements.length > 0) {
            return elements[0];
        } else return null;
    }
    
    function WebForm_GetElementsByTagName(element, tagName) {
        if (element && tagName) {
            if (element.getElementsByTagName) {
                return element.getElementsByTagName(tagName);
            }
            if (element.all && element.all.tags) {
                return element.all.tags(tagName);
            }
        }
        return null;
    }
    
    function WebForm_GetElementDir(element) {
        if (element) {
            if (element.dir) {
                return element.dir;
            }
            return WebForm_GetElementDir(element.parentNode);
        }
        return "ltr";
    }
    
    function WebForm_GetElementPosition(element) {
        var result = new Object();
        result.x = 0;
        result.y = 0;
        result.width = 0;
        result.height = 0;
        if (element.offsetParent) {
            result.x = element.offsetLeft;
            result.y = element.offsetTop;
            var parent = element.offsetParent;
            while (parent) {
                result.x += parent.offsetLeft;
                result.y += parent.offsetTop;
                var parentTagName = parent.tagName.toLowerCase();
                if (parentTagName != "table" &&
                    parentTagName != "body" &&
                    parentTagName != "html" &&
                    parentTagName != "div" &&
                    parent.clientTop &&
                    parent.clientLeft) {
                    result.x += parent.clientLeft;
                    result.y += parent.clientTop;
                }
                parent = parent.offsetParent;
            }
        } else if (element.left && element.top) {
            result.x = element.left;
            result.y = element.top;
        } else {
            if (element.x) {
                result.x = element.x;
            }
            if (element.y) {
                result.y = element.y;
            }
        }
        if (element.offsetWidth && element.offsetHeight) {
            result.width = element.offsetWidth;
            result.height = element.offsetHeight;
        } else if (element.style && element.style.pixelWidth && element.style.pixelHeight) {
            result.width = element.style.pixelWidth;
            result.height = element.style.pixelHeight;
        }
        return result;
    }
    
    function WebForm_GetParentByTagName(element, tagName) {
        var parent = element.parentNode;
        var upperTagName = tagName.toUpperCase();
        while (parent && (parent.tagName.toUpperCase() != upperTagName)) {
            parent = parent.parentNode ? parent.parentNode : parent.parentElement;
        }
        return parent;
    }
    
    function WebForm_SetElementHeight(element, height) {
        if (element && element.style) {
            element.style.height = height + "px";
        }
    }
    
    function WebForm_SetElementWidth(element, width) {
        if (element && element.style) {
            element.style.width = width + "px";
        }
    }
    
    function WebForm_SetElementX(element, x) {
        if (element && element.style) {
            element.style.left = x + "px";
        }
    }
    
    function WebForm_SetElementY(element, y) {
        if (element && element.style) {
            element.style.top = y + "px";
        }
    }
    

4 个答案:

答案 0 :(得分:2)

这是一种在不冻结用户界面的情况下延迟UpdatePanel刷新的方法:

  1. pageLoading事件处理程序中,保存要更新的面板的ID和以前的HTML
  2. pageLoad事件处理程序中,保存面板的新HTML,但用旧的替换
  3. 延迟过期后,在更新的面板中设置新的HTML
  4. 以下是客户端代码:

    <script type="text/javascript">
        var updateTime = 0;
        var updatedPanelArray = [];
    
        function setUpdateTime() {
            updateTime = new Date(Date.now() + 500);
        }
    
        function pageLoading(sender, e) {
            updatedPanelArray.length = 0;
            var panels = e.get_panelsUpdating();
            for (var i = 0; i < panels.length; i++) {
                var pnl = panels[i];
                updatedPanelArray.push({ id: pnl.id, oldHTML: pnl.innerHTML });
            }
        }
    
        function pageLoad(sender, e) {
            if (e.get_isPartialLoad()) {
                for (var i = 0; i < updatedPanelArray.length; i++) {
                    var updatedPanel = updatedPanelArray[i];
                    var pnl = document.getElementById(updatedPanel.id);
                    updatedPanel.newHTML = pnl.innerHTML;
                    pnl.innerHTML = updatedPanel.oldHTML;
                    setTimeout(refreshUpdatePanel, updateTime - Date.now());
                }
            }
        }
    
        function refreshUpdatePanel() {
            for (var i = 0; i < updatedPanelArray.length; i++) {
                var updatedPanel = updatedPanelArray[i];
                var pnl = document.getElementById(updatedPanel.id);
                pnl.innerHTML = updatedPanel.newHTML;
            }
        }
    
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(pageLoading);
    </script>
    

    在触发异步回发之前设置更新时间:

    <asp:UpdatePanel runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="lblUpdatePanel1" runat="server" />
            <asp:Button ID="btnUpdatePanel" runat="server" OnClientClick="setUpdateTime();" OnClick="btnUpdatePanel_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>
    

    可以在代码隐藏中使用以下事件处理程序进行测试(建议:在Javascript代码中将延迟设置为5000毫秒以使其显而易见):

    protected void btnUpdatePanel_Click(object sender, EventArgs e)
    {
        lblUpdatePanel1.Text = DateTime.Now.ToString();
    }
    

答案 1 :(得分:1)

如果你不介意在等待时冻结用户界面,你可以通过让pageLoad事件处理程序忙,直到延迟到期来延迟刷新:

<script type="text/javascript">
    var updateTime = 0;

    function setUpdateTime() {
        updateTime = new Date(Date.now() + 500);
    }

    function pageLoad(sender, e) {
        if (e.get_isPartialLoad()) {
            while (Date.now() < updateTime) { 
                // Loop until the delay expires
            }
        }
    }
</script>

您可以在触发异步回发之前初始化更新时间:

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        ...
        <asp:Button ID="btn1" runat="server" OnClientClick="setUpdateTime();" ... />
    </ContentTemplate>
</asp:UpdatePanel>

答案 2 :(得分:0)

使用UpdatePanel.UpdateMode属性获取或设置一个值,该值指示UpdatePanel控件的内容何时更新。有关详细信息,请访问this链接。

答案 3 :(得分:-1)

你可以延迟服务器端,所以所有的延迟都或多或少等于每个人。

如果这不是一个选项,您可以在更新面板(或其他地方)中有一个隐藏字段。处理更新的功能(在服务器端)将计算执行所花费的时间,在完成之前,将更新此隐藏字段。现在回到客户端,检查该字段的值并计算该值与您的值之间的差值500ms。您可以使用日期时间或毫秒。

这不是最漂亮的解决方案而是imho,这不是人们想要处理的常见问题(事实上,我不认为你应该延迟对最慢的响应更快的响应)