前一步我们实现的AJAX功能工作又快又好。有时会很快,以至于用户没有注意到RSVP链接已经更新为新的文本了。为了让输出的文本更加明显,我们对更新的信息添加一个简单的动画,以获得用户的注意。
默认的ASP.NET MVC项目模板已经包含了jQuery – 一个非常优秀和流行的开源Javascript 库(微软也支持)。jQuery 提供了大量的功能,包括一个HTML DOM 选择和效果库。
为了使用jQuery,首先需要引用jQuery脚本。因为我们几乎在整个网站多处使用jQuery,因此我们在Site.master 页面中添加脚本引用,这样所有页面都可以使用。
<script src="/Scripts/jQuery-1.3.2.js" type="text/javascript"></script>
提示:确保你已经安装了VS 2008 SP1 的JavaScript 智能提示补丁,对JavaScript文件(包括jQuery)提供了丰富的智能提示。你可以从这里下载:http://tinyurl.com/vs2008javascripthotfix
使用jQuery编写代码经常使用通用的$() JavaScript 方法,使用CSS选择器查询一个或多个HTML元素。例如,$(“#rsvpmsg”) 选择所有id为rsvpmsg 的HTML元素,$(“.something”) 则选择所有带”something”的CSS 类的HTML元素。你甚至可以编写更高级的查询,如使用$(“input[@type=radio][@checked]”) 返回所有选择的Radio按钮。
一旦你选择了元素,你可以调用方法,如隐藏它们:$(“rsvpmsg”).hide();
对于本示例中,我们将定义一个简单的JavaScript功能,命名AnimateRSVPMessage,功能为:选择rsvpmsg的<div>元素,并动画调整文本的大小。下面的代码实现在400毫秒内增大文本的大小。
<script type="text/javascript">
function AnimateRSVPMessage() {
$("#rsvpmsg").animate({fontSize: "1.5em"}, 400);
}
</script>
在AJAX完成调用之后,通过传递其名称给Ajax.ActionLink() 辅助方法,来调用上述JavaScript函数(通过AjaxOptions的OnSuccess事件属性)。
<%= Ajax.ActionLink( "注册该晚宴", "Register", "RSVP",
new { id=Model.DinnerID },
new AjaxOptions { UpdateTargetId="rsvpmsg",
OnSuccess="AnimateRSVPMessage" }) %>
现在当点击 [注册该晚宴] 链接,并且AJAX调用完成后,返回的消息将动画地变大。
除了提供OnSuccess事件,AjaxOptions对象公开了OnBegin、OnFailure和OnComplete事件,以及很多其他的属性和有用的选项。
简化-重构RSVP Partial视图
Details视图模板有点变得太长了,理解开始变得有点困难了。为了提高代码的可读性,下面创建一个新的partial 视图 – RSVPStatus.ascx,封装Details视图的所有RSVP视图代码。
右键点击\Views\Dinners 文件夹,选择Add->View菜单项。设置Dinner对象作为强类型的ViewModel,接着从Details.aspx 视图复制/粘到RSVP内容。
下面继续创建另外一个partial视图 – EditAndDeleteLinks.ascx,该视图封装了编辑和删除的链接代码。也设置Dinner对象作为强类型的ViewModel,并从Details.aspx视图中复制/粘帖 – 编辑和删除的逻辑。
这样,在Details视图模板的底部包含了2个Html.RenderPartial()方法的调用:
<% Html.RenderPartial("EditAndDeleteLinks"); %>
<% Html.RenderPartial("RSVP"); %>
下面是添加2个partial视图模板后的/Views/Dinners目录下的文件列表:
这样代码变得更加简洁,易于阅读和维护。
来自西北的狼!