ASP.NET MVC 中的 ASP.NET AJAX 与 jQuery
Posted
技术标签:
【中文标题】ASP.NET MVC 中的 ASP.NET AJAX 与 jQuery【英文标题】:ASP.NET AJAX vs jQuery in ASP.NET MVC 【发布时间】:2010-10-21 02:56:15 【问题描述】:ASP.NET MVC 中哪个更好用?
【问题讨论】:
【参考方案1】:我个人更喜欢 jQuery,原因如下:-
-
插件社区更加多样化,吸引了来自广泛背景的开发人员(不仅仅是 MS 堆栈)。对于 MS-AJAX,您目前几乎受限于用于 UI 小部件的客户端 AJAX 控件工具包。
我发现 jQuery API 比 MS AJAX 提供的更适用于常见的客户端任务
鉴于 MVC 中缺少 WebForms 的烟雾和镜子,您有时需要对 DOM 进行严格控制才能执行某些操作,jQuery 提供的 CSS 选择器引擎确实可以帮助您做到这一点。
就 MS AJAX 在 MVC 中为您提供的功能而言,它可以为您提供一种快速“AJAXify”表单和链接的方法,但就我而言,添加 90kb 的 javascript当 jQuery 中的等效调用(例如 $.get、$.post、$(element).load)相对容易使用时,这样做并不值得。
【讨论】:
【参考方案2】:就个人而言,尽管 htmlHelper 支持 ASP.NET Ajax,但我发现 jQuery ajax 与 JQuery forms plugin 结合是在 ASP.NET MVC 中进行 ajax 表单发布的最佳方式。
例如在 html 产品列表页面上使用 jquery 调用,每个产品都有一个表单,允许将项目添加到购物篮中,一行 jquery 代码可以“ajaxify”页面上的所有表单
$(".productListItem form").ajaxForm( target: '#extraInfoSection' );
结合控制器基类上用于检查标头的简单“IsAjaxRequest”属性:
Request.Headers["X-Requested-With"] == "XMLHttpRequest"
以及控制器中的一些逻辑以返回正确的响应类型:
return IsAjaxRequest ? (ActionResult) View("BasketPartial", basket) : new RedirectBackToReferrerActionResult();
您的表单即使在关闭 javascript 且不涉及 ASP.NET Ajax 的情况下也能正常工作。
【讨论】:
【参考方案3】:我建议您阅读 Dave Ward 的博客Encosia,而不是提出建议,该博客有一系列关于 MS Ajax/更新面板与 jQuery 发布机制的帖子。 Dave 坚持认为 jQuery 的性能非常优越,因为它减少了大约 100K from the transmission to and from the server。
【讨论】:
那些帖子更关注 WebForms 而不是 MVC。该帖子中提到的 100k 节省通常是与 UpdatePanel(ViewState Delta 等)一起使用的垃圾。在 MVC 中来回传输的内容应该大致相同(只是 XmlHttpRequest 之上的抽象有所不同)。 我感觉我将迁移到 MVC,因为我发现 WebForms 令人沮丧,因为实现高级 Ajax 技术似乎有很多障碍。 自从最初提出这个问题以来,我想根据我所学到的知识在这次对话中添加到 cmets。尽管 MVC 不使用 WebForms,但它仍然为其 ViewEngine 构造控件层次结构,因为它仍然依赖于 ASP.NET ViewEngine。因此,我想说 Dave Ward 提到的开销仍然有些适用。当然,由于没有 ViewState 等原因,数字可能会更低。但是一些开销仍然存在,除非你用 Spark 之类的东西替换 ASP.NET ViewEngine,那么绝对没有......【参考方案4】:JQuery 是纯粹的客户端库。 Asp.Net Ajax 包括客户端和服务器端功能。恕我直言,比较并不公平。按照微软的计划,它们可能会相互补充。
【讨论】:
我不同意 Charlie,JQuery 可以对服务器端函数进行回调,就像 ASP.NET Ajax 如何使用 Javascript 来做同样的事情一样。它们都是客户端框架,ASP.NET AJAX 对回发代码有更好的封装,而 JQuery 让您可以更好地控制它。【参考方案5】:有一个用于 MVC 的 ASP.NET AJAX 变体——与 AjaxHelper 和扩展一起使用。这与 jQuery 配合得很好。我有在同一页面上同时使用两者的实例;使用 MVC AJAX 更新基于单击按钮的 DIV 并使用 jQuery 获取 JSON 数据以用于同一页面上的不同操作。标准 ASP.NET AJAX(UpdatePanels 等)应该在 WebForms 世界中使用,而不是在 MVC 中。
【讨论】:
【参考方案6】:我想提一下,Microsoft 支持 JQuery,他们将在即将发布的 Visual Studio 版本中支持它。欲了解更多信息,请访问http://live.visitmix.com/。 ASP.NET AJAX 和 jQuery 没有太多重叠,所以你想同时使用。
【讨论】:
【参考方案7】:首先,请记住 ASP.NET MVC 不支持,或者更好的是,它没有回发概念。
-
asp.net ajax 它基于 post-back 的服务器端机制,它的使命是让 ajax 功能更容易集成到服务器端模式
jQuery,因为其他框架(例如 Extjs)实现了纯客户端 ajax
仍然可以在 asp.net mvc 中使用 asp.net 服务器控件,asp.net ajax 就是其中之一,但是 asp.net mvc 它被认为是为了分离关注点(视图)并成为 REST样式尽可能接近,因此考虑到这一点,最终的想法是:
-
使用 ASP.NET Web 窗体 ASP.NET AJAX 是正确的选择
使用ASP.NET MVC最好尝试去客户端,所以jQuery(或其他)更好
对不起我的英语
【讨论】:
【参考方案8】:将 ASP.NET AJAX 与 Web 窗体结合使用,将 jQuery 与 ASP.NET MVC 结合使用
【讨论】:
这背后的动机是什么?此外,当开始一个新项目时,您会选择哪两个,ASP.NET AJAX 与 Web 窗体或 jQuery 与 MVC?为什么不使用带有 Web 表单和页面方法/Web 服务的 jQuery?我正忙于决定是否值得切换到 MVC,尽管它并不为人所知——尽管我确实来自 Java Struts / JSF 背景,所以无论如何 MVC 范式都在我的脑海中。【参考方案9】:您可能会看到的另一个替代方案是 Ajax.NET,http://www.ajaxpro.info/。我认为它比用于 WebForms 的 ASP.NET AJAX 更好。它也可以在 MVC 下运行。
【讨论】:
【参考方案10】:首先,您可以使用任何一种,只要您在谈论 Microsoft Ajax 时,您只是指客户端库。您可以使用 MS Ajax 客户端库和大多数工具包扩展程序,而无需任何服务器端控件。我使用 Web 表单和 Microsoft Ajax 构建了一个相当大的应用程序,然后将其转换为 MVC/jquery。我发现我使用的 MS Ajax 库中的功能越来越少。可用的插件太多了,以至于连 ajax 工具包都过时了。
如果您正在谈论使用更新面板等的 MS Ajax,那么我会说不,您不能在 MVC 中使用它们。事实上,根本不要使用它们!更新面板是模拟 ajax,页面仍然经历其生命周期,几乎违背了使用 ajax 的目的。
【讨论】:
以上是关于ASP.NET MVC 中的 ASP.NET AJAX 与 jQuery的主要内容,如果未能解决你的问题,请参考以下文章