在ASP.NET MVC应用程序中,MS Ajax和jQuery的优缺点是什么?

17
现在RC1已经发布,我需要决定是否仅使用jQuery进行AJAX请求还是使用MS Ajax库。该应用程序是一个新应用程序。本质上,我将根据Microsoft库相比于jQuery所提供的任何显著优点来决定。我已经加载了jQuery,并且我关心的是文件大小的额外开销。
据我所知,真正的好处只有像Ajax.BeginForm之类的帮助器,但也许这些帮助器在某些时候也可以与jQuery一起使用?今天我的政府雇员朋友还告诉我,MS Ajax库有很多漏洞,这让我担忧。
现在微软已经正式和jQuery交朋友了,我不会太担心他们做任何事情来增强自己的库而抛弃jQuery。
我确实不太了解MS Ajax到底为我做了什么。有哪些利弊。或者它只是为了支持'update panel'而浪费90%的资源?
我也发现非常有趣的是ASP.NET MVC in Action书籍跳过了MS Ajax库,直接进入jQuery:
在本章中,读者将学习如何以比Web Forms更无缝的方式将ajax技术应用于ASP.NET MVC。读者将看到如何利用一种越来越流行的轻量级javascript库jQuery。
(来自AJAX 免费示例 章节)
非常感谢任何人分享有关使用两个库的经验,特别是以下附加问题:
- 假设仅涉及相对简单的ajax需求,两个库之间是否容易转换代码? - 调试在这两个库中是否明显更好或更快? - 有人知道ASP.NET 4.0的进展情况和任何已宣布的计划,是否有可能对MVC有益的AJAX库? - 除了发送请求并将响应粘贴到DIV之外,MS AJAX对于MVC应用程序能做什么? - 如何做等价于" Ajax.BeginForm(...)" 并使用jQuery? - 对你来说,哪一个是必不可少的? - 大多数人都在使用什么?
5个回答

17

个人认为应该使用JQuery。MS AJAX在大小方面比较笨重,而且JQuery可以做很多事情。至于代码转换是否容易,这取决于您使用了多少MS AJAX内容。我不认为从一个调试到另一个调试之间有什么实质性的差异。您将拥有一个更大的JQuery用户社区,可以从中获取资源。


2
为了让"heavyweight"更具体,jQuery 1.3.2 minified在磁盘上大约有50 KB大小,而Microsoft.Ajax.js则大约有100 KB。显然,当通过网络传输时进行GZip压缩,这种差异相对不重要-特别是使用Microsoft的新的"minifying"工具,但我认为其他人可能会发现这些细节有用。 - Todd

10

根据需要,我会使用两种工具。当我希望表单对于不支持JavaScript的浏览器友好,并且通过服务器生成内容时,我会使用AjaxHelper提供的MS AJAX。它会在客户端构建处理非JavaScript启用的浏览器所需的所有内容。在控制器中仅需要检测AJAX/非AJAX并根据情况返回部分视图或全视图。如果我需要在插件(如autocomplete)中使用AJAX,则我会使用jQuery。重点是我使用最适合我的工具(最容易实现)。尽管如此,我大多数的应用都运行在内部网络上,因此我不太关心下载大小。


我注意到如果我有一个JavaScript错误,它实际上会非Ajax方式提交它 - 我认为这非常聪明。个人而言,我更喜欢出现错误,一开始确实很困惑,但是对于我将要进行的事情而言,没有JavaScript功能消失并不是特别担心的问题。 - Simon_Weaver

5
我还发现了关于微软引入jQuery库的jQuery公告
显然:
此外,微软将开发另外的控件或小部件,以在jQuery之上运行,并且这些部件可以轻松地部署在您的.NET应用程序中。jQuery助手也将包含在.NET开发的服务器端部分中(除了现有的助手),为现有的ASP.NET AJAX功能提供补充功能。
因此,我认为他们很可能会拥有与MS内容完全相同的jQuery助手来镜像AJAX助手。
我猜我要采取的解决方案是使用Html.BeginForm,然后拦截提交按钮以使用jQuery。我不太担心没有JavaScript功能的人失去功能,但这并不难做,所以我也可以这么做。

1
JQuery编程比Ajax容易得多,许多与过度开销有关的问题可以通过增加内存而不是简化代码来解决。对我来说,Ajax毫无意义,尽管我只是一个初学者。在处理了过于晦涩的Ajax语法之后,jQuery就像一股清新的空气。

0

在使用MS Ajax框架时,有一件事情我发现用jQuery无法优雅地完成。使用MS Ajax构建的用户控件非常面向对象,而这在jQuery中不容易实现。例如,假设您正在构建一个“地址”用户控件,其中包括地址1、地址2、城市、州、邮政编码和国家。您可以使用jQuery和Ajax构建此控件,但是Ajax库提供的好处是它将地址控件分隔开来。您可以在该控件上定义一个名为“reset()”的函数,以重置地址控件的内容。假设您希望“reset()”将地址1、地址2和城市设置为空字符串,但将州设置为“AL”,将国家设置为美国。您可以在(.js)文件中定义Ajax控件的代码,并将该函数与您的地址控件关联起来。但是,使用jQuery则无法实现相同的功能。您定义的任何函数都将具有全局作用域,没有简单的方法将该函数绑定到地址控件上。您甚至可以在表单上的文本框控件上调用“reset”函数!

因此,如果您想创建纯面向对象的用户控件,我认为更好的选择是使用MS Ajax框架。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接