zoukankan      html  css  js  c++  java
  • FileResult,JavaScriptResult,JsonResult

    FileResult:可以响应任意文档的属性,包括二进制格式的数据,eg:图档,pdf,excel,zip,可以传入byte[],文档路径,Stream等不同的属性,让mvc将属性回传给客户端,除此之外,还能指定回传时的属性类别或指定客户端下载时要显示的文件名等。

     
    实际分为三中:
    FilePathResult:响应一个实体文档的属性
    FileContentResult:回应一个byte[]的属性。
    FileStreamResult:回应一个Stream属性。
     
    file辅助方法可以自动选定以上不同的FileResult响应。
    eg:r如果想通过Action输出一个放在App_data目录下的PNG图文件,
    public ActionResult GetFile(){
    return File(Server.MapPath("~/App_data/UserA/Avatar.png"),"image/png");
    }
     
    如果想让浏览器直接下载文件而不是直接在浏览器开启文件,也可以传入要求下载的文档吗在第三个参数,例如pdf文档来自于数据库,并希望让使用者下载,可以先取得一个byte[]或者stream数据,并在File辅助方法的第二个参数指定正确的Content-type,最后再指定要下载的文档名
    eg:
    public ActionResult GetFile()
    {
    byte[] fileContent=GetFileByteArray/FromDB();
    return File(fileContent,"application/pdf","YourReport.pdf");//第三个参数 文档名可以是中文
    //但是mvc是一句RFX2331的规范来设置中文编码,而RFC2231规范对许多旧版浏览器(ie6,旧版本的safari与chrome)来说并不支持这种http Header Value的编码格式,所以对于旧版本处理中文名称的就要这样
    return File(fileContent,"application/pdf",Server.UrlPathEncode("你的报表.txt"));(只对ie有效)
     
    }
    当使用者单击这个action的网址时,会得到一个是否下载文件的提示。
     
     
    JavaScriptResult:响应js程序代码给浏览器,通过ajax的程序开发,可以利用JavaScriptResult来响应适当的JavaScript程序代码让浏览器动态运行,其实JavaScriptResult的功能与ContentResult差不多,主要的差别在于默认的Content-Type不一样而已,JavaScriptResult默认的Content-Type为application/x-javascript。
    eg:
    public ActionResult JavaScript(){
    return JavaScript("alert('ok')");
    }
    在view中利用ajax辅助方法撰写:@Ajax.ActionLink(" run javascript ","javascript", new AjaxOptions())
    注意:在mvc4默认网络项目模板中运行这段程序,记得在主板页面_Layout.cshtml的head标签里装入正确的js函数库才能正常运行@Aja.ActionLink辅助方法
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")
     
     
    JsonResult :JavaScript Object Notation是web在实作ajax应用程序时经常使用的一种传输数据格式,jsonResult可自动将任意对象数据串行化成JSON格式回传,JsonResult默认contenttype为application/json,
    对某些JavaScriptFramework这是必要需求,eg:jquery
    JsonResult是使用JavaScriptSerializer完成JSON串行操作,但如果你的对象无法串行化,这个转换的过程将会例外。
    注意:为了避免JSONHijacking的攻击,mvc基于安全考虑在默认情况下任何一JsonResult的回传要求都不允许HTTP GET取得任何JSON信息。
    eg:
    public ActionResult JSON()
    {
    return Json(new {
    id=1,
    name="Will",
    Createdon=DateTime.Now
    });
    }
    使用httpPost得到:{“id”:1,"name":"will",..."}
     
    经常使用jq动态取得json数据,在jq中有$.getJSON就是用get方法动态取得JSON数据,如果JsonResult没有热别设置将会导致无法正常取得JSON信息,jq中没有内建$.postJSON,但非常容易实作
    Jquery.post官方网站提供的演示:
    $.postJSON=function(url,data,callback)
    {
    $.post(url,data,callback,"json");
    }
    就可以通过这样新增$.postJSON方法,使用与getJSON一模一样,可以参考http://api.jquery.com/jQuery.getJSON/
     
    小结:
    出于安全考虑,尽量避免使用httpget去获取json数据,但是只使用HTTPPOST取得JSON也有一个问题,那就是从服务器端取回的数据无法被浏览器缓存,如果你的信息敏感度不高且想操作缓存的话,可能还需要让JsonResult可以对httpget要求进行相应,解决办法就是替JSON辅助方法再加上一个JsonRequestBehavior列举参数,这样就可以通过get获取json数据了。
    eg:
    public ActionResult JSON()
    {
    return Json(new {
    id=1,
    name="Will",
    Createdon=DateTime.Now,
    }
    JsonRequestBehavior.AllowGet
    );
    }
  • 相关阅读:
    Android开发(三十二)——延时
    Android开发(三十一)——重复引用包错误Conversion to Dalvik format failed
    Android开发(二十九)——layout_weight的含义
    Android开发(二十八)——基础功能函数
    Android开发(二十七)——android:layout_weight的真实含义
    Android开发(二十六)——Application
    Android开发(二十五)——Android上传文件至七牛
    ansible
    H3C 交换机VRRP和堆叠
    Centos 7.x 双网卡绑定
  • 原文地址:https://www.cnblogs.com/jinhaoObject/p/4597731.html
Copyright © 2011-2022 走看看