以下是ActionResult的继承图:

大概的分类:

  1. EmptyResult:表示不执行任何操作的结果
  2. ContentResult :返回文本结果
  3. JavaScriptResult:返回结果为JavaScript
  4. JsonResult :返回Json结构数据
  5. RedirectResult,RedirectToRouteResult
  6. FileContentResult,FilePathResult,FileStreamResult
  7. ViewResult,PartialViewResult
  8. HttpNotFoundResult,HttpUnauthorizedResult

JavaScriptResult

查了很多的资料都没有发现JavaScriptResult的实际用法,而且还发现了很多不建议使用JavaScriptResult的文章,因为这样脚本和后台不分离。

很多文章是按一下方式来使用JavaScriptResult的:

Action

public ActionResult GetTime()
{
var script = string.Format("$('#myPnl').html('{0}');", DateTime.Now);
return JavaScript(script);
}

View

@Html.ActionLink("Click Me", "GetTime")

这样的执行结果是页面并不会执行这一段script,而是将这段script作为文件Response出来。

既然执行GetTime这个Action其实取得script这段脚本的文件,那么就可以这样来使用:

<script src="@Url.Action("GetTime")" type="text/javascript"></script>

这样的结果就是该script段可以调用GetTime Action返回的代码段。

遗留的问题:

在MVC3中,如果引用了jquery.unobtrusive-ajax,那么使用@Html.ActionLink的时候页面会报JavaScript脚本错误,原因未知。

JsonResult

大家都知道AJax是使用Json来传输数据的,Json数据在JavaScript中被广泛使用,所以JsonResult的使用范围是非常管的,下面代码演示了在MVC的Ajax.ActionLink中如何使用JsonResult

Action

[HttpPost]
public ActionResult GetDetail()
{
return Json(new
{
UserName = "Test User Name",
Email = "Test@Test.com",
Desc = "Test Desc"
});
}

View

<script type="text/javascript">
function handleSuccess(context) {
$("#userName").html(context.UserName);
$("#email").html(context.Email);
$("#desc").html(context.Desc);
}
</script>
<table>
<tr>
<td>
UserName
</td>
<td>
<div id="userName" />
</td>
</tr>
<tr>
<td>
Email
</td>
<td>
<div id="email" />
</td>
</tr>
<tr>
<td>
Desc
</td>
<td>
<div id="desc" />
</td>
</tr>
</table>
@Ajax.ActionLink("Click Me", "GetDetail", new AjaxOptions { HttpMethod = "POST", OnSuccess = "handleSuccess" })

在点击ActionLink后,会调用GetDetailAction返回JsonResult,在OnSuccess方法中可以对返回的结果进行处理。

当然要使用以上功能需要引用以下文件:

<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>

以上使用方法是在MVC3上测试通过的,但是在参考MVC2的代码时,发现用法上有以下差异:

在MVC2中是不支持jquery.unobtrusive-ajax.min.js的,返回的context也需要做以下处理,

<script type="text/javascript">
function handleSuccess(context) {
var json = context.get_data();
var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);
$("#userName").html(data.UserName);
$("#email").html(data.Email);
$("#desc").html(data.Desc);
}
</script>

MVC ActionResult -- JavaScriptResult,JsonResult的更多相关文章

  1. FileResult,JavaScriptResult,JsonResult

    FileResult:可以响应任意文档的属性,包括二进制格式的数据,eg:图档,pdf,excel,zip,可以传入byte[],文档路径,Stream等不同的属性,让mvc将属性回传给客户端,除此之 ...

  2. asp.net mvc ActionResult

    定义在Controller中的Action方法大都返回一个ActionResult对象.ActionResult是对Action执行结果的封装,用于最终对请求进行响应.ASP.NET MVC提供了一系 ...

  3. MVC ActionResult派生类关系图

    态度决定一切,我要改变的不仅仅是技术,还有对待事情的态度! 先上个图: 由上图可知,ActionResult为根节点,其下有很多子节点!下面简单介绍下: MVC中ActionResult是Action ...

  4. ASP.NET MVC ActionResult的实现

    1.11种ActionResult 在System.Web.Mvc命名空间下: ActionResult是一个抽象类, 在Action中返回的都是其派生类.下面是我整理的ASP.NET MVC 1.0 ...

  5. MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器

    实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器 MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过A ...

  6. MVC架构下,使用NPOI读取.DOCX文档中表格的内容

    1.使用NPOI,可以在没有安装office的设备上读wiod.office.2.本文只能读取.docx后缀的文档.3.MVC架构中,上传文件只能使用form表单提交,转到控制器后要依次实现文件上传. ...

  7. ASP.NET MVC的JavaScriptResult

    前段时间,我们有学习<在ASP.NET MVC使用JavaScriptResult>http://www.cnblogs.com/insus/p/3960994.html ,今天我们来加强 ...

  8. System.Web.Mvc.ActionResult.cs

    ylbtech-System.Web.Mvc.ActionResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Publi ...

  9. asp.net mvc笔记一,最小的MVC工程

    Asp.net MVC项目默认会引用很多第三方插件,特别是现在的5.0,默认示例项目就几十M,搞得都不知道那些才是MVC必须的,是重点,那些是可有可无的. 今天我们就来试验一下,看看一个最小的MVC工 ...

随机推荐

  1. java给图片加水印代码

    try { String targetImg = "D:/Blue hills.jpg"; // String pressImg = "D:/20130311220300 ...

  2. 设置go语言语法高亮

    1. 将$GOROOT/misc/vim/go.vim文件拷贝到-/.vim/syntax/目录下 2. 添加下面代码到~/.vimrc文件中 let mysyntaxfile = "XXX ...

  3. Embedding Lua in C: Using Lua from inside C.

    Requirments:     1: The Lua Sources.    2: A C compiler - cc/gcc/g++ for Unix, and Visual C++ for Wi ...

  4. Dijsktra算法C++实现

    Dijsktra算法解决了有向图G=(V,E)上带权的单源最短路径问题.但要求所有边的权值非负. 思想:Dijkstra算法中设置了一顶点集合S,从源点s到集合中的顶点的最终最短路径的权值均已确定.算 ...

  5. 大陆 Google play 开发者注册(2016)

    1:准备一个VPN, 如:  https://vpnso.com   收费的,使用一两年了,还不错,很稳定2:准备一张普通的银行卡或者信用卡就可以了,能正常绑定支付宝就行3:在全球付上面申请一个 虚拟 ...

  6. 一起学Maven

    转载自:http://blog.csdn.net/songdeitao/article/details/18452459 一. 初识Maven 开场白 在现在的项目开发过程中,越来越重视项目的管理,而 ...

  7. s3cmd的安装与配置

    安装包链接:http://files.cnblogs.com/files/litao0505/s3.rar 安装S3cmd1. tar -zxf s3cmd-1.0.0.tar.gz2. mv s3c ...

  8. Android Handler消息传递

    一.背景 出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的原则:只允许UI线程 ...

  9. QTP不能打开或者新建FunctionLibrary的解决方法

    今天打开QTP,然后打开function library的时候,qtp窗口右下角一直都是open...状态,怀疑是qtp与其他的软件冲突了. 解决方法: 直接执行QTP安装程序,然后选择修复QTP,问 ...

  10. yeoman运行grunt serve 提示错误

    今天在使用 yeoman 的时候,当我运行 grunt serve 命令的时候,出现如下提示: 1.Error: Cannot find module 'load-grunt-tasks' $ gru ...