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
);
}

FileResult,JavaScriptResult,JsonResult的更多相关文章

  1. Asp.net MVC4 Step by Step (1)-路由,控制器,视图

    注意:此文需要你有一定Asp.net MVC的基础,很多东西省略了,只是做个提要笔记形式. 要创建一个ASP.NET MVC的Web应用,首先要去下载ASP.NET MVC框架, 可以访问ASP.NE ...

  2. 在.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图

    开发背景: 今天在做一个关于商城后台金额报表统计的功能,为了让数据直观明了并且这个报表还需要在手机端自适应所以我决定采用HIghCharts插件下的的报表,大家也可以去了解一下免费开源主要是好看. 首 ...

  3. 在Asp.Net MVC中使用NPOI插件实现对Excel的操作(导入,导出,合并单元格,设置样式,输入公式)

    前言 NPOI 是 POI 项目的.NET版本,它不使用 Office COM 组件,不需要安装 Microsoft Office,目前支持 Office 2003 和 2007 版本. 1.整个Ex ...

  4. 「小程序JAVA实战」小程序的个人信息作品,收藏,关注(66)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudegerenxinxizuopinshoucangguanzhu65 ...

  5. [实战]MVC5+EF6+MySql企业网盘实战(18)——文件上传,下载,修改

    写在前面 经过一段时间的秀秀改改,终于把文件上传下载,修改文件夹文件名称的功能实现了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企 ...

  6. C#在线预览文档(word,excel,pdf,txt,png)

    C#在线预览文档(word,excel,pdf,txt,png) 1.预览方式:将word文件转换成html文件然后预览html文件2.预览word文件:需要引入Interop.Microsoft.O ...

  7. C# 基于NPOI+Office COM组件 实现20行代码在线预览文档(word,excel,pdf,txt,png)

    由于项目需要,需要一个在线预览office的功能,小编一开始使用的是微软提供的方法,简单快捷,但是不符合小编开发需求, 就另外用了:将文件转换成html文件然后预览html文件的方法.对微软提供的方法 ...

  8. CRUD,分页,排序,搜索与AngularJS在MVC

    下载source - 53.1 MB 介绍 在选择最新的技术时,有几个因素会起作用,包括这些技术将如何与我们的项目集成.这篇文章解决了开始使用AngularJS和MVC的乞丐的问题.这篇文章告诉使用语 ...

  9. Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!

    前面讲了Spring Boot 使用 JPA,实现JPA 的增.删.改.查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用.JPA使用非常简单,功能非常强大的ORM框架,无需任何数据访问层 ...

随机推荐

  1. svn上想回滚代码怎么办?——svn merge 命令

    小博客断更了很久,最近想接着尝试建立写作的习惯,把自己工作生活遇到的有用知识沉淀下来.尽管微信公共账号比较火,但个人觉得这种不能用搜索引擎检索的东西完全就是历史的倒退,就像 RSS 这种提高信息传播效 ...

  2. 在JavaWeb中使用Log4j步骤

    在JavaWeb中使用Log4J指南.每次在开始写一个项目的时候都忘记Log4J如何配置.所以写个步骤,作为记录. 第一步 下载Log4J jar包 从Apache Logging Services ...

  3. ServletContext中常用方法(getRsource和getResourceAsStream)

    转自:http://blog.csdn.net/yakson/article/details/9203267 一..获取Tomcat的Context的初始化参数. 1.获取Tomcat的server. ...

  4. HDU 4349 Xiao Ming's Hope lucas定理

    Xiao Ming's Hope Time Limit:1000MS     Memory Limit:32768KB  Description Xiao Ming likes counting nu ...

  5. Hark的数据结构与算法练习之圈排序

    算法说明 圈排序是选择排序的一种.其实感觉和快排有一点点像,但根本不同之处就是丫的移动的是当前数字,而不像快排一样移动的是其它数字.根据比较移动到不需要移动时,就代表一圈结束.最终要进行n-1圈的比较 ...

  6. CodeForces 656B

    C - C Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status ...

  7. PDA手持终端在ERP系统仓库管理出入库盘点环节的应用

    PDA手持终端在ERP系统仓库管理出入库盘点环节的应用 传统库存管理的数据录入过程,常采用PC机录入数据,或在电脑上结合条码枪扫描条码进行管理(非实时),造成管理上的不便.因而,采用无线(WIFI)手 ...

  8. Rightmost Digit

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  9. 贪心 BestCoder Round #39 1001 Delete

    题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...

  10. reqSUB错误

    ---- ERROR ----    Error in dispatcher subroutine reqSUB: Invalid PAR(1): 0502 上面是用adams/ca加载一个汽车模型时 ...