点击这里给我发消息 点击这里给我发消息

让ASP.NET MVC页面返回不同类型的内容

添加时间:2010-6-22
    相关阅读: ASP ASP.NET 页面 HTML VC 项目

在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 { get; set; }  
5   
6         // Data的类型  
7         Type DataType { get; set; }  
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("/upload/users/1/20100622/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         }
结果图

让ASP.NET MVC页面返回不同类型的内容

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

本文作者:未知
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册