BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Hartmut Wilms 关注 0 他的粉丝 发布于 2008年1月1日. 估计阅读时间: 6 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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

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

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

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

除了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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

学习啦 by 郭 固

原来可以这样啊

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT