8.2.1  AJAX的ActionLink方法

在Razor视图中,AJAX辅助方法可以通过Ajax属性访问。和HTML辅助方法类似,Ajax属性上的大部分AJAX辅助方法都是扩展方法(除了AjaxHelper类型之外)。

Ajax属性的ActionLink方法可以创建一个具有异步行为的锚标签。假如要在打开的页面的底部为MVC Music Store添加一个"daily deal"链接,要求在用户单击链接时是在当前页面上显示打折扣的专辑的详细信息,而不是在一个新的页面中显示。

为了实现这一效果,需要在视图"Views/Home/Index.cshtml"中已有专辑列表的后面添加如下代码:

    <div id="dailydeal">
@Ajax.ActionLink("Click here to see today's special!",
"DailyDeal",
new AjaxOptions{
UpdateTargetId="dailydeal",
InsertionModeInsertionMode=InsertionMode.Replace,
HttpMethod="GET"
})
</div>

ActionLink方法的第一个参数指定了链接文本,第二个参数是要异步调用的操作的名称。类似于同名的HTML辅助方法,AJAX辅助方法ActionLink也提供了各种重载版本,用来传递控制器名称、路由值和HTML特性。

对于HTML辅助方法与AJAX辅助方法,显著不同的是AjaxOptions参数。该参数指定了发送请求和处理服务器返回的结果的方式。参数中还 包括用来处理错误、显示加载元素、显示确认对话框等的选项。在这个示例中,AjaxOption参数的选项指定了要使用来自服务器的响应元素来替换id值 为"dailydeal"的元素。为了得到服务器的响应,需要在控制器HomeController上添加一个DailyDeal操作:

public ActionResult DailyDeal()
{
var album = GetDailyDeal(); return PartialView("_DailyDeal", album);
} private Album GetDailyDeal()
{
return storeDB.Albums
.OrderBy(a => a.Price)
.First();
}

AJAX操作链接的目标操作的返回值是纯文本或HTML。在这个示例中,将通过渲染一个分部视图来返回HTML。下面的Razor代码就在项目的Views/Home文件夹下的_DailyDeal. cshtml文件中。

    @model MvcMusicStore.Models.Album  

    <p>
<img alt="@Model.Title" src="@Model.AlbumArtUrl" />
</p> <div id="album-details">
<p>
<em>Artist:</em>
@Model.Artist.Name
</p>
<p>
<em>Price:</em>
@String.Format("{0:F}", Model.Price)
</p>
<p class="button">
@Html.ActionLink("Add to cart", "AddToCart",
"ShoppingCart", new { id = Model.AlbumId }, "")
</p>
</div>

当用户单击链接时,就会向控制器HomeController的DailyDeal操作发送一个异步请求。一旦操作从一个渲染的视图中返回了 HTML,后台的脚本就会利用返回的HTML替换DOM中已有的dailydeal元素。在用户单击链接之前,应用程序首页的底部如图8-2所示。

 
(点击查看大图)图  8-2

在用户单击并查看折扣专辑之后,页面并没有全部刷新,显示效果如图8-3所示。

 
(点击查看大图)图  8-3

如果想查看操作中的代码,可使用NuGet安装Wrox.ProMvc3.Ajax.Action Link包。该包中的代码依赖于MVC
Music Store中的数据访问类,所以最好尝试MVC Music
Store项目中的包。一旦安装上该包,就可以导航到/ActionLink查看新的首页了。

Ajax.ActionLink生成的内容能够获取服务器的响应,并可以直接将新内容移植到页面中。这是如何发生的呢?下一节将介绍异步操作链接的工作原理。

Ajax的ActionLink方法(适用于异步加载)的更多相关文章

  1. ajax二次封装之异步加载

    ajax二次封装之异步加载 ajax异步加载会导致在数据未加载回来就读取数据,然后出现数据为空的报错.在ajax封装时,将ajax直接改为同步,虽然可以解决报错,但是会导致页面渲染被阻塞,接口反应时间 ...

  2. Javascript 异步加载详解(转)

    本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属 ...

  3. Javascript 异步加载详解

    Javascript 异步加载详解 本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy ...

  4. javascript异步加载详解(转)

    本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属 ...

  5. [转载]Javascript 同步异步加载详解

    http://handyxuefeng.blog.163.com/blog/static/4545217220131125022640/ 本文总结一下浏览器在 javascript 的加载方式. 关键 ...

  6. cocos2d-x lua中实现异步加载纹理

    原文地址:  http://www.cnblogs.com/linchaolong/p/4033118.html 前言   问题:最近项目中需要做一个loading个界面,界面中间有一个角色人物走动的 ...

  7. reload() 方法用于重新加载当前文档。配合Ajax异步请求。

    1. reload() 方法, reload() 方法用于重新加载当前文档.配合Ajax异步请求. http://www.w3school.com.cn/jsref/met_loc_reload.as ...

  8. 向上滚动或者向下滚动分页异步加载数据(Ajax + lazyload)[上拉加载组件]

    /**** desc : 分页异步获取列表数据,页面向上滚动时候加载前面页码,向下滚动时加载后面页码 ajaxdata_url ajax异步的URL 如data.php page_val_name a ...

  9. 淘宝购物车页面 智能搜索框Ajax异步加载数据

    如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...

随机推荐

  1. Citrix 服务器虚拟化之二十七 XenApp6.5发布服务器桌面

    Citrix 服务器虚拟化之二十七  XenApp6.5发布服务器桌面 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1)  服务器桌面:发布场中服务器的整个 ...

  2. 【译文】漫谈ASP.NET中的Session

    最近这两天被一个Web Farm环境下的Session处理问题虐得很痛苦,网上到处找解决方案,在无意中翻看到这篇文章,感觉很不错,顺手查了一下,貌似没有现成的译文,于是一咬牙一跺脚把这篇文章翻译出来了 ...

  3. 使用phonegap + appframework2.0框架

    1.页面切换动画结束时卡(禁用动画) 2.搜索或导航标签需要固定(标签选择器动态修改高度) 3.pancel容器默认生成的时候内容不放 通过动态的的$("").empty().ht ...

  4. Spring MVC @RequestMapping Annotation Example with Controller, Methods, Headers, Params, @RequestParam, @PathVariable--转载

    原文地址: @RequestMapping is one of the most widely used Spring MVC annotation.org.springframework.web.b ...

  5. Java连接mysql数据库并进行内容查询

    最近用框架做了几个项目,感觉当初底层的东西有点忘了,写一个JDBC的简单的连接代码来熟悉回顾一下,也希望对刚接触的新手能有所帮助.这也是我的第一篇随笔,废话不多说,直接上代码: public Conn ...

  6. #maven解决乱码问题

    <build>        <plugins>        <plugin>        <groupId>org.apache.maven.pl ...

  7. hg(Mercurial)版本库迁移到git版本库

    这几天没事干净搞迁移了,迁移完MVC又迁移版本库,还把工作电脑迁移了一下,开始用Win8.1了.这个迁移主要是因为实在不想在工作电脑上又装git又装hg了,点个右键出来一大堆菜单,况且现在git已经成 ...

  8. ng-sortable-支持触屏的拖拽排序

    1.首先是到https://github.com/a5hik/ng-sortable/tree/master/dist下载所需的文件:ng-sortable.min.js,ng-sortable.cs ...

  9. poj 1330 Nearest Common Ancestors 裸的LCA

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...

  10. 一步步搭建自己的轻量级MVCphp框架-(三)一个国产轻量级框架Amysql源码分析(2) 进程

    Amysql类 按照我的理解这就是框架的初始化 上代码 class Amysql { public $AmysqlProcess; public function Amysql() { global ...