1

我在一个表单中有 20 个 ajax 可编辑下拉菜单。每个下拉列表都相对于其他的 selectedindex 更改进行绑定。

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

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

 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";        
            }
           } 
    }   

还是我应该去更新面板?
哪一个对我来说是更好的选择?还是有更好的解决办法?

我想要非常好的性能,因为我们的客户经常使用这个页面,我们希望确保它很快。

我正在使用vs2010。

4

3 回答 3

0

AJAX 路由会更快。 UpdatePanels 使事情看起来像部分页面加载,但实际上,它返回整个页面并仅更新UpdatePanel.

于 2012-09-18T18:38:12.827 回答
0

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

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

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

于 2012-09-18T18:38:29.113 回答
0

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

使用简单的 AJAX 调用就完全不同了,调用只会获取您需要的数据,而且性能要好得多

然而 - 危险危险 罗宾逊博士

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

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

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

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

在 WebForms 中,虽然不建议这样做...

于 2012-09-18T18:47:21.250 回答