本帖最后由 xcchcaptain 于 2012-01-09 23:43:29 编辑

解决方案 »

  1.   

    “页面”这个词儿在asp.net开发者面前变得混淆不清了。假设页面就是指浏览器端某个时间刚刚解析执行完并且展现出来的页面,那么显然(一般)不存在被另页面上的ajax访问的问题。假设你是指一个浏览器端的ajax去以一个url请求访问web服务器上的aspx,那么其实此时aspx的本质已经毫无意义,你不过是把它当作一个ashx使用。如果你理解了aspx跟ashx的区别,就会更轻松地支持ajax。ajax应该访问一个数据服务就足够了,访问一个页面就好象是去排队买火车票的外地人要出示在当地城市至少5年的缴税记录才能买到火车票(这显然是歧视外地人)。ajax不应该访问aspx,而且就算访问了你也是放弃了aspx中几乎所有有用的东西,而必须清除所有有用的输出(Response.Clear)然后再输出一点文本内容,这要比ashx沉重太多了。
      

  2.   

    asp.net开发者可能把asp.net服务器系统对Page对象实例的完整生命周期叫做页面。当请求到来时,asp.net要创建一个页面控件,以及(通常都存在)所有子控件,然后经过了固定的几十道关卡的处理,抛出十(至少)几个事件,最后才运行到Render阶段。所以使用ajax访问aspx其实是画蛇添足的,应该使用ashx来响应ajax。可能是早期一些网络“教程”带来的误解。
      

  3.   

    微软的asp.net ajax中包括两类机制,一类重量级方式是使用UpdatePanel控件完成的局部刷新,另一类轻量级方式是直接(自动化)在客户端ScriptManager中声明一下就可以像调用普通js函数一样调用asmx(包括你可以下载html/dom片段然后更新到前端)。不过总的来说,如果只是为了“局部刷新”而言,UpdataPanel是最完美的解决方案。而使用javascript方式(包括使用jQuery,以及asp.net ajax的轻量方式)其实都是把大量工作和责任推卸给编程人员。虽然这样的好处就是响应比较快。除非有一整套基于javascript的成熟的开发工具,就像silverlight或者flash一样,可以让你完全沉浸在浏览器端本地开发上,否则ajax开发永远都是一种貌似时髦但是其实产生了一大堆越来越难以维护和复用的垃圾脚本代码的方式,所以基于ajax开发特别丰富的企业应用或者网游是一种奢望。虽然看到很多人觉得ajax时髦,但是你看看有几个人熟练地用jQuery搞稍微复杂一点的业务订单界面了?都是在“研究”最初级的简单界面操作,他们的假设接口就是以为.net的控件是无能的而只有手写低级代码才是万能的,这其实是被低级语言所害了,花数年时间也拼凑不成一个纯ajax的丰富的企业软件出来。
      

  4.   

    哥你太强大了,受教了,的确,看的几个教程都是吧数据传到aspx文件中,看来ajax水还是很深啊!
    谢谢啊
      

  5.   

    那么ashx文件好axmx文件都能处理ajax的请求,两者有什么优劣么