写点什么

为 ASP.NET MVC 框架添加 AJAX 支持

  • 2007-12-31
  • 本文字数:1845 字

    阅读完需:约 6 分钟

ASP.NET MVC 框架的官方 CTP 版本还没有包括对 AJAX 的支持。不过目前有几个示例展示了如何为 ASP.NET MVC 应用添加 AJAX 功能。

Nikhil Kothari 提供了一个示例程序和示例代码,它们示范了为 ASP.NET MVC 框架添加类似 ASP.NET AJAX 这样的 AJAX 支持:

AjaxaController 是我添加的一个类,它引入了一个新的属性 IsAjaxRequest,我能够在 Action 方法中用它来做一些诸如输出不同视图的事情。它同样引入了另外一些成员,例如 RenderPartial 方法,它能够使用定义在一个部分视图中而不是一个完整页面中的内容,来生成用户界面的一部分。下面是我提供的新 Controller,以及新的 Add 方法。还有一些额外的改变用加粗来表示了:

<span>public</span> <span>class</span> TaskListController : <strong>AjaxController</strong> {<br></br><span>public</span> <span>void</span> Add(<span>string</span> name) {<br></br>  Task newTask = <span>null</span>;<br></br><span>if</span> (String.IsNullOrEmpty(name) == <span>false</span>) {<br></br>  newTask = _taskDB.AddTask(name); <br></br> } <br></br><strong><span>if</span> (IsAjaxRequest) {<br></br><span>if</span> (newTask != <span>null</span>) {<br></br> RenderPartial(<span>"TaskView"</span>, newTask);<br></br> }<br></br> }</strong> <span>else</span> {<p><span>[...]</span> }</p><br></br> } <br></br>}

除了 Controller 扩展之外,Nikhil 还提供了一些扩展方法给视图来使用:“RenderBeginForm 用于生成一个普通的 Form 标签,RenderBeginAjaxForm 生成一个 AJAX 可用的 Form […],以及 RendEndForm 方法”。这个示例“简单示范了使用 ASP.NET 页面中 AJAX 核心功能——部分刷新,Behaviors 和 Extender 控件——的第一步”

Kevin Hoffmann 在文章“如何为 ASP.NET MVC 框架提供 AJAX 功能”提出了他的看法。在一开始他批评 Nikhil 的示例仅仅示范了如何通过生成 HTML 来更新 Web 页面的一小部分。在他看来:

Ajax,在企业应用中,不仅仅是指动态生成一小块 div。诚然这的确是一个很重要的的部分,但是大部分人在使用 XMLHttpRequest 对象来向服务器端的 Controller 请求数据时,他们希望得到的仅仅是数据,而不是已经生成好的 div。在很多情况下,我们需要一个控制器通过不同的 Action(诸如 REST/POX/Web Services 类型的 Action)向智能客户端提供各种形式的数据。因此,尽管我在某些场景下会喜欢 RenderPartial 之类的方法,但是更好的例子应该是通过生成一个视图来输出简单的 XML,如果是 JSON 那就更好不过了。

它对 Controller 中提供的 IsAjaxRequest 属性更加担心:

MVC 最重要的就是合理的分离关注点。在示例中只有一行代码破坏了这一点,那就是IsAjaxRequest属性。这有点像设法让 MVC 框架变得和旧有的 PostBack 世界变得接近,而且坦白地说,旧有的 PostBack 世界能够解决我的问题。恕我直言,Controller 应该只是一个 Controller,它不应该,也不能决定应该是生成 AJAX 还是普通的内容,生成 AJAX 还是普通的 HTML 应该由 View 来决定。Controller 的作用应该是为生成一个视图获取正确的数据,然后选择一个试图进行内容生成。

Kevin 最后总结到,他希望微软能够提出一个令人信服的理由,来说明为什么开发人员不应该去使用一些其他的 AJAX 类库,使它们能够让 MVC 一起工作。

作为那些回应 Kevin 的人, Chad Myers 提供两个方法将其他的 AJAX 类库和 ASP.NET MVC 进行集成。在结合使用script.aculo.us 与ASP.NET MVC 框架一文中,Chad 展示了如何在ASP.NET MVC 视图中使用 script.aculo.us 客户端 JavaScript + AJAX 框架和它的一些控件。script.aculo.us 是“一套 Web 2.0 风格的 JavaScript 类库,可以帮助 Web 开发人员轻易为项目添加各种可视化和 AJAX 的效果”。

第二个方法展示了如何结合使用jQuery 和ASP.NET MVC 框架 jQuery 是“一个快速的,简练的 JavaScript 类库,能够简化您遍历 HTML 文档,操作事件,实现动画以及为您的 Web 页面添加 AJAX 交互效果”。Chad 将 Jack Born 实现“原地修改”效果的指南一文中说明的方法移植到了ASP.NET MVC 框架中,以此展示jQuery 能够如何方便地与新框架进行集成。用Chad 的话来说,如果您打算使用ASP.NET MVC 框架时,只需要将jQuery 示例中那些涉及服务器端部分里的“PHP”或“Ruby”等字样替换成“ASP.NET MVC”就可以了。

查看英文原文: Adding Ajax Support to the ASP.NET MVC Framework

2007-12-31 10:012550
用户头像

发布了 64 篇内容, 共 96306 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

2023年甘肃省等级保护测评机构新鲜出炉!

行云管家

等保 等级保护 甘肃

北京云管平台采购选哪家?为什么?多少钱?

行云管家

云计算 多云管理 云管平台 云管平台厂商

微服务高并发概念与核心类:了解Sentinel的一些概念

互联网架构师小马

Java 微服务 sentinel

如何在VMware Workstation虚拟机上快速部署AntDB社区版

亚信AntDB数据库

数据库 AntDB数据库 企业号 6 月 PK 榜

为什么 Serverless 能提升资源利用率?

阿里巴巴云原生

阿里云 Serverless 云原生

微服务高并发流量服务降级、限流、熔断、流量效果控制

互联网架构师小马

Java 微服务

5分钟了解Kubernetes Ingress和Gateway API

俞凡

架构 云原生 网络

微服务高并发基础知识:Sentinel性能压测

互联网架构师小马

Java 微服务 sentinel

Vue-命名路由

张三丰无极

6 月 优质更文活动

见“芯”知著,浅析北斗芯片关键技术

江湖老铁

专访泛境科技:如何借助3DCAT实时云渲染打造元宇宙解决方案

3DCAT实时渲染

元宇宙 元宇宙解决方案 元宇宙实时云渲染

v7.1.0 Resource Control 功能测试

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

普通Java工程师如何成长为一名优秀的架构师?

程序员小毕

程序人生 高并发 架构师 java程序员 java面试

MobPush 消息重弹

MobTech袤博科技

FinClip | 来看看5月的成绩单吧

FinClip

图数据库在通信行业有哪些应用?

悦数图数据库

洋洋洒洒2000字带你了解微服务高并发知识:Sentinel的特性

互联网架构师小马

Java 微服务 sentinel

Testng和Junit5多线程并发测试对比

javalover123

Java 单元测试 JUnit testNG junit5

Vue-缓存路由组件

张三丰无极

6 月 优质更文活动

Vue-<router-link>的replace属性

张三丰无极

6 月 优质更文活动

分布式数据库 Join 查询设计与实现浅析 | 京东云技术团队

京东科技开发者

MySQL 数据库 elasticsearch join 企业号 6 月 PK 榜

tidb变更大小写敏感问题的总结

TiDB 社区干货传送门

集群管理 故障排查/诊断

【TiDB Future App Hackathon 2023 】TiDB 首届全球黑客马拉松,开发者的狂欢夏日盛会!快来一起 Coding 吧!

TiDB 社区干货传送门

终极指南:Scrum中如何设置需求优先级

敏捷开发

项目管理 Scrum 敏捷开发 优先级

提示工程七巧板:让ChatGPT发挥出最佳性能

博文视点Broadview

MIAOYUN“一云多芯”解决方案获评2023西部信创优秀解决方案

MIAOYUN

解决方案 信创 信创生态 MIAOYUN 一云多芯

# 文盘Rust -- tokio绑定cpu实践

TiDB 社区干货传送门

开发语言

v7.1 LTS Resource Control 试用

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

Vue-路由的params参数

张三丰无极

6 月 优质更文活动

微服务架构中的数据一致性:解决方案与实践| 得物技术

得物技术

微服务 数据一致性

Vue-路由的props配置

张三丰无极

6 月 优质更文活动

为ASP.NET MVC框架添加AJAX支持_.NET_Hartmut Wilms_InfoQ精选文章