Ajax代码更快,或者更新asppanel更快填充asp.net中的下拉列表

时间:2012-09-18 18:33:37

标签: asp.net ajax

我在表单中有20个ajax可编辑的下拉列表。每个下拉列表都会根据其他选定的索引更改进行绑定。

我有很多来自数据库的记录用于绑定和一些操作。什么表现会更好?

我应该使用此代码来绑定下拉列表:

 var XmlHttp;
       //Creating object of XMLHTTP For AJAX Method
       function CreateXmlHttp() {
           //Creating object of XMLHTTP in IE
           try {
               XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
           }
           catch (e) {
               try {
                   XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
               }
               catch (oc) {
                   XmlHttp = null;
               }
           }
           //Creating object of XMLHTTP in Mozilla and Safari 
           if (!XmlHttp && typeof XMLHttpRequest != "undefined") {
               XmlHttp = new XMLHttpRequest();
           }
       }

       function GetAppStoreLnk(id) {               
           var txtnameid = document.getElementById(id);

           CreateXmlHttp();

           var requestUrl = "Default2.aspx?id="+txtnameid+"";

           if (XmlHttp) {
               XmlHttp.onreadystatechange = function() { getschemename(txtnameid) };
               XmlHttp.open("GET", requestUrl, true);
               XmlHttp.send(null);
           }
       }

       function getschemename(id)
       { 
           // To make sure receiving response data from server is completed
           if(XmlHttp.readyState == 4) {    
            // To make sure valid response is received from the server, 200 means response received is OK
            if(XmlHttp.status == 200) {         
                var strData = XmlHttp.responseText;
            if(strData != "") {            
                 var arrscheme = strData.split("|");
                     id.length = 0;     

                 for(i=0; i<arrscheme.length-1; i++) {
                    var strscheme = arrscheme[i];
                var arrschnm = strscheme.split("~");

                    id.options[i] = new Option();
                id.options[i].value = arrschnm[0];
                    id.options[i].text = arrschnm[1]; 
                 }      
            } else {
                    id.length = 0;
                id.options[0] = new Option(); 
                id.options[0].value = "";
                    id.options[0].text = "Scheme Name is not available";        
                }

                    document.body.style.cursor = "auto";    
            }
            else {
            id.length = 0;
            id.options[0] = new Option(); 
                    id.options[0].value = "";
            id.options[0].text = "server is not ready";
                document.body.style.cursor = "auto";        
            }
           } 
    }   

或者我应该去UpdatePanel?
对我来说哪一个更好? 还是有更好的解决方案?

我想要非常好的表现,因为我们的客户经常使用此页面,我们希望确保它快速。

我正在使用vs2010。

3 个答案:

答案 0 :(得分:0)

AJAX路线会更快。 UpdatePanel使事情看起来像部分页面加载,但事实上,它会返回整个页面,只是更新UpdatePanel中的部分。

答案 1 :(得分:0)

UpdatePanel不提供我们通常与AJAX关联的效率。例如,您是否知道,当UpdatePanel控件对服务器执行异步AJAX回调以更新其内容时,该请求会自动包含发布的所有内容ASP。 NET常规,包括状态显示。

应用程序更有效,更喜欢使用对WebMethods或页面方法的异步调用,而不是使用UpdatePanel。

链接:http://msdn.microsoft.com/fr-fr/magazine/cc163413.aspx

答案 2 :(得分:0)

我同意其余的答案,邪恶的UpdatePanel会降低页面的整体性能,因为为了工作,它必须来回发送整个页面 ViewState 命令在每个异步帖子上执行整个页面生命周期

通过简单的AJAX调用,这是完全不同的,调用只能获得您需要的数据并且性能要好得多

然而 - 危险的危险DR Robinson

由于您使用的是WebForms,并且您的意图是填充20 DropDownLists,您可以尝试使用AJAX调用来执行此操作,您会发现它显然可以正常工作。 如果您尝试通过javascript / jquery将一个值添加到DropDownList来发布您的网页,则会抛出异常。

这是因为ASP.Net WebForms默认验证发布到服务器的值,如果这些值未在ViewState中注册,则会因为试图篡改页面内容而引发安全性异常。

遗憾的是,您无法在控制级别禁用此选项,您必须在页面级别禁用它:

<%@ Page EnableEventValidation="false" ....

在WebForms中,不推荐虽然......