zoukankan      html  css  js  c++  java
  • EF5+MVC4系列(8) ActionResult的返回值

    我们在MVC的代码中,经常会看到这样的一个 代码

    image

    可能有人会有疑问,既然我定义的是ActionResult,为什么返回值会是View方法呢?

    image

    其实这个View方法的返回值的类型是ActionResult的子类ViewResult

     

    我们查看MVC源码可以看到 ActionResult是个抽象类,  ActionResult 有多个派生类(子类),有的子类又有子类 (例如 ViewResultBase 就有  ViewResult子类 和  PartialViewResult 这2种子类)

    每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回字符串等。我们来看一下ActionResult派生类关系图

    image

    最后的图如下

    image

    他们的功能和调用方法 如下

     

    类名称 子类名称 说明 对应Controller中的方法名
    ContentResult     Content
    EmptyResult     Empty
    JavaScriptResult     JavaScript
    JsonResult   返回Json格式的数据 Json
    RedirectResult   使用Response.Redirect重定向页面(返回302状态码直接跳转到其他页面) Redirect
    HttpStatusCodeResult HttpNotFoundResult 返回一个404状态码(未找到) HttpNotFound
    HttpUnauthorizedResult 返回一个401状态码(未授权状态) HttpUnauthorized
    FileResult FileContentResult 通过 文件byte[] 写入Response 返回客户端 File
    FilePathResult 通过 文件路径 写入Response 返回客户端
    FileStreamResult 通过 Stream 写入Response 返回客户端
    ViewResultBase PartialViewResult 调用父类ViewResultBase 的ExecuteResult方法. 
    重写了父类的FindView方法. 
    寻找用户控件.ascx文件 在MVC4中,寻找cshtml视图
    PartialView
    ViewResult

    调用父类ViewResultBase 的ExecuteResult方法. 
    重写了父类的FindView方法. 
    寻找视图页面(aspx,cshtml或自定义视图)

    Controller的View()方法默认封装ViewResult返回结果

    View
    RedirectToRouteResult   根据Route规则重定向页面 RedirectToRoute

     

    public ActionResult Test()
            {
                //return Content("文字内容",);                     //ContentResult  如果是用重载 指定内容的 MIME类型,还可以输出js脚本
                //return Content("<ROOT><TEXT>123</TEXT></ROOT>","text/xml",Encoding.UTF8);
                //return new EmptyResult();                     //EmptyResult  注意需要new来使用. 这里也可以写成 return null
                //return JavaScript("alert('xx')");             //JavaScriptResult  这里要注意,前台要通过js或者是jquery来调用这个Action才有效果
                //return Redirect("http://www.baidu.com");        //RedirectResult   直接跳转到指定页面
                //return HttpNotFound("This Page Not Exist");     //HttpNotFoundResult   返回404   这里还可以自己输入英文文字,如果是汉字,好像乱码
                //return new  HttpUnauthorizedResult();           //HttpUnauthorizedResult 返回 HTTP 错误 401.0 - Unauthorized 未授权,注意,需要new
                //return File(Server.MapPath("~/images/logo.png"), "image/png");   //直接在浏览器中显示图片
                //return File(Server.MapPath("~/images/logo.png"), "image/png","aa.png");   //让浏览器下载图片(提示下载,而不是显示图片)
                //return RedirectToRoute(new { action = "list" });  //转到指定路由,这里我只设定了Action为list 
                //return RedirectToAction("Edit", "Home", new { id = 3 }); //转到指定action,可以设置 Action,Controller以及参数
                //return PartialView("PartialLogin");   //PartialViewResult  //部分视图 一般是前台用ajax来调用
                //return View();  //完整视图
                return Json(new{id = 1,name = "will",CreatedOn = DateTime.Now}, JsonRequestBehavior.AllowGet);  //返回序列化后的json,并且允许ajax使用get方法调用
            }

    下载

    image

     

    image

    image

     

    返回json(已经序列化过了)

     

    image

     

    关于上面FileResult下载的3种方式,以及 返回JavaScriptResult和 JsonResult 可以看看下面的2篇文章


    了解ASP.NET MVC几种ActionResult的本质:FileResult
    了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult & JsonResult

  • 相关阅读:
    系统架构精选
    【原】Windows下Nexus搭建Maven私服
    【转】SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
    Windows 安装计算机系统的几种常用方法
    windows下Ruby开发环境搭建
    Redis 学习记录
    SQLServer 表数据与 Excel 中数据的互相复制
    【转】用JIRA管理你的项目
    用模板写插入排序-数组
    整数类型
  • 原文地址:https://www.cnblogs.com/joeylee/p/3858828.html
Copyright © 2011-2022 走看看