ASP.NET MVC中的ASP.NET AJAX与jQuery的比较

33

在ASP.NET MVC中使用哪种更好?

10个回答

34

个人而言,我更喜欢 jQuery,理由如下:

  1. 插件社区更加广泛,吸引了来自各种背景的开发人员(不仅限于 MS 技术栈)。目前使用 MS-AJAX,你几乎只能使用客户端 AJAX 控件工具包来制作 UI 小部件。
  2. 我认为 jQuery API 更适用于常见的客户端任务,比 MS AJAX 提供的更好。
  3. 在 MVC 中缺乏 WebForms 的花招时,有时需要对 DOM 进行牢固的控制以完成某些任务,jQuery 提供的 CSS 选择器引擎真的可以帮助你做到这一点。

就 MS AJAX 在 MVC 中提供的功能而言,它可以为你提供许多便利,例如快速“AJAXify”表单和链接,但在我看来,添加价值为 90kb 的 JavaScript 并不值得,特别是当相应的 jQuery 调用(例如 $.get、$.post、$(element).load)都相对容易使用时。


18

个人而言,尽管HtmlHelper支持ASP.NET Ajax,我发现使用jQuery ajax和JQuery forms插件来完成ASP.NET MVC中的ajax表单提交是最好的方式。

例如,在一个包含商品列表的html页面上,每个商品都有一个表单,允许将该商品添加到购物篮中。通过一行jQuery代码,“ajaxify”页面上的所有表单。

$(".productListItem form").ajaxForm({ target: '#extraInfoSection' });

结合一个简单的控制器基类上检查头部信息的'IsAjaxRequest'属性:

Request.Headers["X-Requested-With"] == "XMLHttpRequest"

并在控制器中添加一些逻辑以返回正确的响应类型:

return IsAjaxRequest ? (ActionResult) View("BasketPartial", basket) : new RedirectBackToReferrerActionResult();

如果没有使用ASP.NET Ajax,即使在JavaScript关闭的情况下,您的表单仍然可以正常工作。


9

建议您阅读Dave Ward的博客Encosia,其中有一系列关于MS Ajax/ Update Panel与jQuery post机制的文章。Dave认为,jQuery的性能要远远优于MS Ajax/ Update Panel,因为它可以从传输到和从服务器接收数据中削减约100K的数据。


6
这些帖子更关注WebForms而不是MVC。在该帖中提到的节省10万的内容通常是与UpdatePanel一起使用的垃圾(即ViewState和Delta等)。在MVC中,来回传输的内容应该大致相同(只是上面的XmlHttpRequest的抽象有所不同)。 - John Foster
2
我有一种感觉,我将会迁移到MVC,因为我发现WebForms令人沮丧,因为似乎要跨越许多障碍才能实现高级Ajax技术。 - David Robbins
4
自从我最初提出这个问题以来,我想根据我所学到的内容添加有关此对话的评论。即使MVC不使用WebForms,但由于它仍然依赖于ASP.NET ViewEngine,因此它仍会构造其ViewEngine的控件层次结构。因此,我认为Dave Ward提到的开销仍然适用。虽然由于没有ViewState等等原因,这个数字可能较低,但某些开销仍然存在,除非您将ASP.NET ViewEngine替换为诸如Spark之类的东西,那么就完全没有了... - emalamisura

5

JQuery是一个纯客户端的库。Asp.Net Ajax包括客户端和服务器端功能。在我看来,这两者的比较并不公平。根据微软的计划,它们可能互相补充。


2
我不同意Charlie的看法,JQuery可以向服务器端函数进行回调,就像ASP.NET Ajax使用Javascript完成相同的操作一样。它们都是客户端框架,ASP.NET AJAX更好地封装了回发代码,而JQuery则使您对其拥有更多的控制权。 - emalamisura

2

有一个与ASP.NET AJAX配合使用的MVC变体--使用AjaxHelper和扩展。 这可以很好地与jQuery协同工作。 我有一些实例,在同一页上同时使用两者; 使用MVC AJAX通过点击按钮更新DIV并使用jQuery获取不同操作的JSON数据。 在MVC中,应该使用标准的ASP.NET AJAX(UpdatePanels等),而不是在WebForms领域使用。


1
我想提一下,微软支持JQuery,并且他们将在即将推出的Visual Studio版本中为其提供支持。欲了解更多信息,请访问http://live.visitmix.com/。ASP.NET AJAX和jQuery没有太多重叠之处,因此您可以同时使用它们两个。

1
首先,需要了解ASP.NET MVC不支持PostBack概念。
  1. ASP.NET AJAX基于PostBack的服务端机制,其任务是使服务端模式下集成AJAX功能更加容易。
  2. jQuery等其他框架实现了纯客户端的AJAX。

在ASP.NET MVC中仍然可以使用ASP.NET服务器控件,其中包括ASP.NET AJAX,但是ASP.NET MVC的设计思想是将关注点(视图)分离,并尽可能地符合REST风格,因此我们可以得出以下结论:

  1. 如果使用ASP.NET Web Forms,则ASP.NET AJAX是正确的选择。
  2. 如果使用ASP.NET MVC,则最好尝试客户端实现,因此jQuery(或其他框架)是更好的选择。

对我的英语表示抱歉。


1

使用ASP.NET AJAX与Web Forms,以及jQuery与ASP.NET MVC


这背后的动机是什么?另外,在启动新项目时,你会选择两者中的哪一个,ASP.NET AJAX与Web Forms还是jQuery与MVC?为什么不使用jQuery与Web Forms和Page Methods / Web Services?我正在忙于决定是否值得转换到MVC,尽管它并不是那么出名 - 尽管我来自Java Struts / JSF背景,所以MVC范例已经在我的脑海中了。 - jamiebarrow

1

另一个你可能想看看的替代方案是Ajax.NET,http://www.ajaxpro.info/。我认为它比ASP.NET AJAX更适合WebForms。它也可以在MVC下运行。


1
首先,您可以使用任何一种,只要在谈论 Microsoft Ajax 时,您只是指客户端库。 您可以使用 MS Ajax 客户端库和大多数工具包扩展程序而无需任何服务器端控件。 我已经使用 Web 表单和 Microsoft Ajax 构建了一个相当大的应用程序,然后将其转换为 MVC / jquery。 我发现我越来越少地使用 MS Ajax 库中的功能。 有很多插件可用,甚至使 ajax 工具包过时。
如果您正在谈论使用更新面板等的 MS Ajax,则我会说不,您不能在 MVC 中使用它们。 实际上,根本不要使用它们! 更新面板是模拟的 ajax,页面仍然通过其生命周期,几乎破坏了使用 ajax 的目的。

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