请注明转载地址:http://www.cnblogs.com/arhat

首先老魏先说一下抱歉,昨天由于在安装CentOS,Mono,Jexus配置Linux环境下的ASP.NET运行环境,花费了不少的时间才配置好了,一直忙到2点多,由于太晚了,老魏没有来得及写文章,抱歉了各位。好了,废话不多说,开始今天的旅程。

在上一节中,我们讲了JsonResult和JavaScriptResult两个类,同时涉及到了Ajax。同时老魏认为在上一节中对于@Ajax和JavaScriptResult讲的有点乱,所以本节老魏专门来探讨一下@Ajax和JavaScriptResult吧。

那么在Razor中,提供了一个用于处理Ajax的辅助方法,如果要使用Ajax辅助方法,则必须在页面中加入jquery.unobtrusie-ajax.js这个文件才能正常运行。那么我们可以在”_Layout.cshtml”中加入这个js引用。
在Ajax辅助方法中,提供了常用的两种方法,一个是超链接,一个是表单。下面我们来看一下这个两个方法。

@Ajax.ActionLink(text,method,AjaxOptions)

这个是用来生成一个超链接的,这个超链接要异步调用服务器端的method,然后把method的结果传递给AjaxOptions进行处理。其实这个很好理解,我们可以拿着传统的Ajax和这个@Ajax辅助方法来对比一下。比如,我们现在要发送一个Get异步请求,从服务器段得到一串字符串。

先来看看传统的Ajax调用:

Server:

public ActionResult ServerMethod(){return Content(“Hello ajax”);}

Client:

<script type=”text/script”>function InvokeAjax(){$.get(“/Home/ServerMethod”,null,function(data){alert(data);},”text”);} </script><a href=”javascript:InvokeAjax()”>传统调用</a>

大家可以看出,传统的Ajax调用需要用到一个JS函数来发起一个异步请求,同时需要一个回掉函数来处理服务器端发送过来的数据。

那么,下面我们看看Ajax辅助方法的使用。

首先需要在页面中加入jquery.unobtrusie-ajax.js文件,然后通过@Ajax来生成一个连接。

@{ViewBag.Title = "Ajax辅助方法";}@section script{function success(data){alert(data);}}@Ajax.ActionLink("Ajax辅助方法", "ServerMethod", new AjaxOptions() { OnSuccess="success" })

下面,我们来对比一下:

从上图,我们可以看出,success函数就相当于function(data),都是回调函数,而ActionLink生成的超链接就相当于直接调用InvokeAjax方法来发送一个异步请求。参数ServerMethod就是异步请求的方法就相当于”/Home/ServerMethod”,所以,从本质上看没有任何的区别,只不过@Ajax辅助方法用起来就显得比较简单了。

不知道大家看到这里有没有明白@Ajax的用法呢?其实就是传统Ajax调用的简写方式。下面我们来分析一下这个@Ajax.ActionLink方法。

ActionLink(String linktext, String actionName, AjaxOptions)
ActionLink(String linktext, String actionName, Object routeValue, AjaxOptions)

我们来看看这两个重载方法(常用的)的参数

Linktext:超链接的文本

actionName:调用的action

routeValue:包含路由参数的对象

ajaxOption:异步请求选项的对象

其中对于linktext和actionName不用过多解释,上面的例子中就已经可以看出是什么了,对于routeValue其实就是要传递的参数对象,通过匿名对象传递给服务器。

ajaxOptions:其实就是回调对象,就相当于传统Ajax的回调函数了。我们来看一下这个对象的属性。

那么AjaxOptions对象就是通过这些属性来执行相应的回调内容。

Confirm:在请求之前弹出一个警告框(一般用于删除,更新等操作的提示)。我们来操作一下,把上面的代码改一下:
@Ajax.ActionLink("Ajax辅助方法", "ServerMethod", new AjaxOptions() { Confirm="确认调用吗?", OnSuccess="success" })

预览一下,看看结果。

当我们点解确定之后,才会出现服务器返回的内容。

HttpMethod:设置请求方法Get还是Post。

InsertionMode:设置如何把服务器返回的内容插入到目标Dom中,而这个Dom元素通过UpdateTargetId来指定。InsertionMode是个枚举类型Replace(替换,默认),InsertBefore(在Dom内容之前插入),InsertAfter(在Dom内容之后插入)

下面我们更改一下View中代码,添加一个Div,用来存放服务器返回的内容。

@Ajax.ActionLink("Ajax辅助方法", "ServerMethod", new AjaxOptions() { UpdateTargetId="result"})<div id="result"></div>

预览一下结果:

我们来试一下InsertBefore(在Dom内容之前插入)。更改代码如下:

@Ajax.ActionLink("Ajax辅助方法", "ServerMethod", new AjaxOptions() { InsertionMode=InsertionMode.InsertBefore, UpdateTargetId="result"})<div id="result">内容</div>

预览一下结果:

LoadingElementId:Ajax请求没有完成时要显示的元素。

更改一下代码:

@Ajax.ActionLink("Ajax辅助方法", "ServerMethod", new AjaxOptions() { LoadingElementId="loading", InsertionMode=InsertionMode.InsertBefore, UpdateTargetId="result"})<div id="result">内容</div><div id="loading" style="display:none">loading....</div>

同时为了实现loading的效果,我们在服务器端加入 System.Threading.Thread.Sleep(3000)来延长时间。

我们来看一下结果:当我们点击链接的时候loading会显示出来,完成之后会自动的消失。

对于OnBegin,OnComplate,OnSuccess,OnFailure这几个属性,大家猜猜就应该知道是怎么回事了,分别是在开始,完成,成功,失败时要执行的JS函数,用法和上面的例子中OnSuccess的用法一样,大家可以自行的研究,老魏这里就不在举例子了。

这就是@Ajax的用法,当然还有表单,表单也可以使用@Ajax。那么下一节中我们继续来研究@Ajax和JavaScriptResult吧,本节先讲到这儿吧。顺便说一下,老魏在后面的几天可能比较繁忙,文章尽可能的按时发布。顺便,这几天抽个空,老魏把Mono,CentOS的配置写一下吧!

转载于:https://www.cnblogs.com/arhat/p/3551361.html

一步步学习ASP.NET MVC3 (10)——@Ajax,JavaScriptResult(1)相关推荐

  1. asp.net mvc3 利用Ajax实现局部刷新

    1.利用Ajax.ActionLink()方法 首先在_Layout.cshtml文件中加载 运行AJAX必要的Jquery <script src="@Url.Content(&qu ...

  2. Asp.net中的AJAX学习记录之一 AJAX技术的崛起与Asp.net AJAX的诞生

      最近开始学习Asp.net中的AJAX,可能我的高手朋友们会说:"走还不稳呢!怎么就想学跑了?"呵呵!主要是我在做项目中体会到AJAX真的是很好的一门技术,应该好好的学习一下, ...

  3. 基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一)

    从这篇博客,我会一步步的为大家讲解,easyui框架中最常用的一个控件datagrid.在使用easyui框架时,datagrid是使用最多的控件,它不仅好用,关键是实用. 我为大家建立一个博客更新的 ...

  4. ASP.NET MVC3 及其学习资源

    今天,Scott 宣告了 ASP.NET MVC3,IIS Express, SQL CE4, Web Farm Framework, Orchard, WebMatrix 的发布. Announci ...

  5. 一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义

    一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义 在第一章节,你将内容页重置为网站定义.重置母版页到网站定义也没有什么不同.你丢失了在页面上做出的自定义,包括任何静 ...

  6. 学习ASP.NET一定要学习ASP.NET AJAX吗?

    最近儿子生病,一直没有时候来进一步的学习ASP.NET AJAX,不过有时会想一定要学习ASP.NET AJAX吗? 我个人认为:开发B/S系统,在很多情况下需要与服务器打交道,比如一个页面有很东西, ...

  7. ASP.NET MVC3 学习笔记(一)MVC模式简介

    以下文字摘自 ASP.NET MVC3 高级编程 MVC将应用程序的用户界面(User Interface,UI)分为三个主要部分: 模型:一组类,描述了要处理的数据以及修改和操作数据的业务规则 视图 ...

  8. DayPilot——10分钟内用于ASP.NET MVC的AJAX每月事件日历

    目录 1.项目设置(00:00:00-00:03:00) 2. ASP.NET MVC视图(00:03:00-00:04:00) 3.茶歇(00:04:00-00:05:00) 4. ASP.NET ...

  9. Asp.net MVC3 一语道破

    Asp.net MVC前两年就听说了,但一直没有去用,中间只是粗略的了解了下,在前段时间做的栏目改版时才真正的去学习和使用--刚开始学,对其'路由'和请求解析执行的过程感觉比较神秘,但随着项目中的应用 ...

最新文章

  1. MATLAB学习笔记(一)——入门与操作
  2. 工信部发布新能源车准入新规 9月1日起正式实施
  3. android中颜色参考
  4. 利用Android NDK编译lapack
  5. 备战双十一,大数据告诉你哪家快递公司最强?
  6. 看风水用什么罗盘最好_兰花用什么花盆栽植最好?
  7. 小程序json字符串取值问题,怎么取出来的是undefined,eval函数不能用?
  8. 银联接口(注意项备忘)
  9. 软件性能测试——负载测试的最佳实践
  10. python机器学习库keras——CNN卷积神经网络人脸识别
  11. Illustrator 教程,如何在 Illustrator 中锁定、分组和隐藏内容?
  12. Mac文件管理技巧:灵活的颜色标记,更好地分类
  13. bodymovin导出没有html5,AE导出Web动画插件Bodymovin 5.7.6+使用教程 For CC 2014 – CC 2020...
  14. 浅谈信息学奥赛NOIP
  15. docker 安装 es + kibana + ik + 拼音
  16. Scheduled里面报错No thread-bound request found
  17. 北京上海楼市有价无市局面愈演愈烈
  18. 计算机网络的形成和发展
  19. 5G智慧灯杆网关的行业应用与前景
  20. ipad4使用教程 ipad mini使用技巧

热门文章

  1. Python全栈工程师(异常(基础))
  2. 第一章 Linux系统简介
  3. jQuery使用CDN加速
  4. Delphi编程禁止用户关闭操作系统
  5. [翻译]“LINQ to Objects”提供程序是否内置性能优化?
  6. QT-QPainter绘制曲线等基本图形
  7. 汇编-函数调用的理解
  8. C#中使用OpenGL(API)创建OpenGL渲染环境
  9. IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用
  10. Windows编程之定时器的使用和定时销毁桌面出现的窗口,以及窗口句柄的获取