Ajax请求与普通mvc

时间:2014-01-24 01:36:49

标签: asp.net-mvc jquery

我对MVC很新,但我的研究指出我可以使用默认方式通过表单向我的控制器发送请求,或者我可以使用jQuery和Ajax请求。

通常的做法是一直使用Ajax,以便在我不想要的时候避免页面重新加载,并允许加载图标?

两种向控制器发送数据的方式是否应该混合使用?我想,使用表单更容易,因为你需要在Ajax中手动为所有模型属性喝咖啡,但我觉得你的Haddin看起来更灵活。

我想知道这种模式(主要使用Ajax请求)是不是一个好主意。

3 个答案:

答案 0 :(得分:2)

我认为这主要是一个偏好问题,但我认为在jQuery中使用AJAX可以提供更灵活,更灵敏的应用程序。此外,它不需要更多的工作。要将表单中包含的所有模型属性提交给控制器,您只需要执行以下操作:

$.ajax({
   url: "SomeController/SomeMethod", 
   data: $('#FormName').serialize(),  //this will basically do what MVC would have done if you used forms and a submit button
});

在控制器上,模型绑定器会将所有属性绑定回模型。

所以你会:

public ActionResult SomeMethod(SomeModel someModel)
{
  // do work with your tightly bound model!
  return View();
}

但是......如果你只想知道AJAX的优点以及你也会遇到的一些CONS,那么你就是:

<强> PRO:

在许多情况下,网站上的相关网页包含很多内容,这些内容在它们之间很常见。使用传统方法,必须在每个请求上重新加载该内容。但是,使用Ajax,Web应用程序只能请求需要更新的内容,从而大幅减少带宽使用和加载时间。

异步请求的使用允许客户端的Web浏览器UI更具交互性并快速响应输入,页面的各个部分也可以单独重新加载。即使应用程序在服务器端没有更改,用户也可能会感觉应用程序更快或响应更快。

使用Ajax可以减少与服务器的连接,因为脚本和样式表只需要请求一次。

可以在整个网站上维护状态。 JavaScript变量将保持不变,因为无需重新加载主容器页面。

<强> CON:

由于它们的动态特性,与静态页面相比,Ajax接口通常更难开发。

使用连续的Ajax请求动态创建的页面不会自动向浏览器的历史引擎注册,因此单击浏览器的“后退”按钮可能不会将用户返回到启用Ajax的页面的早期状态,而是可能返回它们到它之前访问的最后一页。解决方法包括使用不可见的IFrame来触发浏览器历史记录的更改,并在运行Ajax时更改URL的锚点部分(在#之后),并监视它的变化。

动态网页更新还使用户难以为应用程序的特定状态添加书签。存在这个问题的解决方案,其中许多使用URL片段标识符('#'之后的URL部分)来跟踪并允许用户返回给定状态的应用程序。

由于大多数网页抓取工具不会执行JavaScript代码,因此可公开索引的网络应用程序应该提供另一种方法来访问通常使用Ajax检索的内容,以允许搜索引擎对其进行索引。

任何浏览器不支持JavaScript或XMLHttpRequest或仅禁用此功能的用户将无法正确使用依赖于Ajax的页面。同样,移动电话,PDA和屏幕阅读器等设备可能无法支持所需的技术。能够使用Ajax的屏幕阅读器可能仍然无法正确读取动态生成的内容。让用户执行功能的唯一方法是回退到非JavaScript方法。这可以通过确保链接和表单可以正确解析而不仅仅依赖于Ajax来实现。在JavaScript中,表单提交可以通过“return false”停止。

相同的源策略阻止某些Ajax技术跨域使用,尽管W3C有一个XMLHttpRequest对象的草案,可以启用此功能。

与其他Web技术一样,Ajax也有自己的一组漏洞,开发人员必须解决这些漏洞。熟悉其他Web技术的开发人员可能必须学习新的测试和编码方法来编写安全的Ajax应用程序。

基于Ajax的接口可能会显着增加用户生成的Web服务器及其后端(数据库或其他)请求的数量。这可能导致更长的响应时间和/或额外的硬件需求。

what are the advantages and disadvantages of making ajax calls using jquery?

答案 1 :(得分:1)

这是单页应用程序(SPA)的工作方式。我建议使用像AngularJS(MVW模式),Backbone(MVC模式),KnockoutJS(MVVM模式)这样的javascript数据框架。

您没有(不应该)在javascript数据层中复制模型。 你将松开的是MVC.net视图模板思想。

你可以混合两种,但你会得到双方的弊端。

这是使用KnockoutJS构建的官方微软SPA演示:

http://www.asp.net/single-page-application/overview/introduction/knockoutjs-template

我目前正在使用AJAX(身份验证除外)处理SPA,它为UX提供了一个全新的维度。

答案 2 :(得分:0)

这是非常常见的做法,我认为微软引入webapi的原因之一,所以你并没有真正使用他们的mvc,但所有都依赖于你的ajax调用,或者其他js框架,比如ember / angular js。

设置/编码ajax方式需要更多时间,但它对用户看到的速度更快。