程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 讓ASP.NET MVC頁面返回不同類型的內容

讓ASP.NET MVC頁面返回不同類型的內容

編輯:關於ASP.NET

在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          }

顯示出來的結果

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved