InfoQ

新闻

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

作者 Hartmut Wilms 发布于 2007年12月31日 上午10时1分

社区
.NET
主题
.NET框架
标签
AJAX,
ASP.NET,
MVC,
Scriptaculous,
jQuery

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

学习啦 发表人 固 郭 发表于 2008年1月6日 下午8时32分
  1. 返回顶部

    学习啦

    2008年1月6日 下午8时32分 发表人 固 郭

    原来可以这样啊

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。