• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

(转)让ASP.NETMVC页面返回不同类型的内容

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在ASP.NET MVC的controller中大部分方法返回的都是ActionResult,更确切的是ViewResult。它返回了一个View,一般情况下是一个HTML页面。但是在某些情况下我们可能并不需要返回一个View,我们可能需要的是一个字符串,一个json或xml格式的文本,一个图片。
ActionResult是一个抽象类,我们平时比较常用的ViewResult是它的派生类,所以我们也可以写一个StringResult、XmlResult、ImageResult来实现上面提到的需求。由于返回字符串可以有更简单的方法,直接将需要返回字符串的方法的返回值设置成string型就可以了,JsonResult在ASP.NET MVC中已经有提供。所以下面只演示XmlResult和ImageResult。
ASP.NET MVC项目是开源的(可以在http://www.codeplex.com/aspnet下载源代码),所以我们可以参考其中ViewResult和JsonResult的代码进行改写。主要的思路是设置返回数据流HTTP Header中的Content-Type,然后将要返回的内容写入Response中。


先演示XmlResult

XmlResult的代码:

 

 1 public class XmlResult:ActionResult
 2     {
 3         // 可被序列化的内容
 4         object Data { getset; }
 5 
 6         // Data的类型
 7         Type DataType { getset; }
 8 
 9         // 构造器
10         public XmlResult(object data,Type type)
11         {
12             Data = data;
13             DataType = type;
14         }
15 
16         // 主要是重写这个方法
17         public override void ExecuteResult(ControllerContext context)
18         {
19             if (context == null)
20             {
21                 throw new ArgumentNullException("context");
22             }
23 
24             HttpResponseBase response = context.HttpContext.Response;
25 
26             // 设置 HTTP Header 的 ContentType
27             response.ContentType = "text/xml";
28 
29             if (Data != null)
30             {
31                 // 序列化 Data 并写入 Response
32                 XmlSerializer serializer = new XmlSerializer(DataType);
33                 MemoryStream ms = new MemoryStream();
34                 serializer.Serialize(ms,Data);
35                 response.Write(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
36             }
37         }
38     }

在controller中调用它

1 public ActionResult Xml()
2         {
3             // 创建一个DemoModal对象,No属性为1,Title属性为Test
4             DemoModal dm = new DemoModal() { No = 1, Title = "Test" };
5 
6             // 序列化为XML格式显示
7             XmlResult xResult = new XmlResult(dm, dm.GetType());
8             return xResult;
9         }

 

显示出来的结果

 

下面演示的是ImageResult

ImageResult的代码

 1 public class ImageResult:ActionResult
 2     {
 3         // 图片
 4         public Image imageData;
 5 
 6         // 构造器
 7         public ImageResult(Image image)
 8         {
 9             imageData = image;
10         }
11 
12         // 主要需要重写的方法
13         public override void ExecuteResult(ControllerContext context)
14         {
15             if (context == null)
16             {
17                 throw new ArgumentNullException("context");
18             }
19 
20             HttpResponseBase response = context.HttpContext.Response;
21 
22             // 设置 HTTP Header
23             response.ContentType = "image/jpeg";
24 
25             // 将图片数据写入Response
26             imageData.Save(context.HttpContext.Response.OutputStream, ImageFormat.Jpeg);
27         }
28     }

在controller中调用

 

 1 public ActionResult Img()
 2         {
 3             // 获取博客园空间顶部的banner图片
 4             WebRequest req = WebRequest.Create("http://space.cnblogs.com/images/a4/banner.jpg");
 5             WebResponse res = req.GetResponse();
 6             Stream resStream = res.GetResponseStream();
 7             Image img = Image.FromStream(resStream);
 8 
 9             // 输出给客户端
10             ImageResult r = new ImageResult(img);
11             return r;
12         }

结果图

这个比较多用在向客户端传送验证码图片时。

 

转载地址:http://www.cnblogs.com/snowdreams/archive/2008/11/15/let-aspnet-mvc-view-return-different-type-content.html

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
XPO学习(6)----实现一个简单的留言薄(ASP.NET)发布时间:2022-07-10
下一篇:
ASP.NET实现PDF文件下载[转]发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap