gpt4 book ai didi

asp.net-mvc - Ajax请求与普通MVC

转载 作者:行者123 更新时间:2023-12-01 03:40:39 25 4
gpt4 key购买 nike

我对MVC还是很陌生,但是我的研究指出,我可以使用默认方式通过表单将请求发送到控制器,也可以使用jQuery和Ajax请求。

经常使用Ajax是常见的做法,这样我就可以避免在不需要时避免页面重新加载,并允许加载图标?

将数据发送到控制器的两种方式是否应该混合使用?我想,使用表单更容易,因为我认为您需要在Ajax中手动处理所有模型属性,但是看起来您的Haddin更具灵活性。

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

最佳答案

我认为大多数情况下都是首选问题,但我认为将AJAX与jQuery结合使用可提供一种更加灵活和响应迅速的应用程序。另外,它不必做更多的工作。要将表单中拥有的所有模型属性提交给控制器,您只需执行以下操作:

$.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,那么您可以:

专业版:

在许多情况下,网站上的相关页面包含许多彼此之间共有的内容。使用传统方法,必须在每次请求时重新加载该内容。但是,使用Ajax,Web应用程序只能请求需要更新的内容,从而大大减少了带宽使用和加载时间。

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

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

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

缺点:

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

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

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

由于大多数Web搜寻器都不执行JavaScript代码,因此可公开索引的Web应用程序应提供一种替代的方法来访问通常使用Ajax检索的内容,以允许搜索引擎对其进行索引。

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

尽管W3C具有可启用此功能的XMLHttpRequest对象的草稿,但相同的原始策略阻止了某些Ajax技术跨域使用。

像其他Web技术一样,Ajax也具有开发人员必须解决的一系列漏洞。熟悉其他Web技术的开发人员可能必须学习新的测试和编码方法才能编写安全的Ajax应用程序。

Ajax支持的界面可能会大大增加用户生成的对Web服务器及其后端(数据库或其他)的请求的数量。这可能导致更长的响应时间和/或额外的硬件需求。

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

关于asp.net-mvc - Ajax请求与普通MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21322820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com