一步步學習ASP.NET MVC3 (8)——EmptyResult,ContentResult,RedirectResult


  請注明轉載地址:http://www.cnblogs.com/arhat

  上一章,我們闡述了Controller,Action和ActionResult所代表的含義及使用,本章繼續研究ActionResult。因為ActionResult是Action的返回值,所代表的意義就是Action執行后的結果,比較重要,所以本章重點將介紹ActionResult和他的子類。
由於上一章我們講了ActionResult的一個子類ViewResult,我們知道了ViewResult就是代表視圖的意思,根據Action的返回值決定調用那個View。我們從幫助文檔上看,可以知道ActionResult的子類有下面幾種。

ViewResult 表示HTML的頁面內容
EmptyResult 表示空白的頁面內容
RedirectResult 表示定位到另外一個URL
JsonResult 表示可以運用到AJAX程序中JSON結果
JavaScriptResult 表示一個JavaScript對象
ContentResult 表示一個文本內容
FileContentResult 表示一個可以下載的、二進制內容的文件
FilePathResult 表示一個可以下載的、指定路徑的文件
FileStreamResult 表示一個可以下載的、流式的文件

大家可以看到Action的子類常用的有9個,分別代表了不同的含義,根據具體的情況使用具體的子類。由於子類比較多,本章將講解EmptyResult,RedirectResult,ContentResult這三種。剩余的幾種類型我們在后面的章節繼續講解。
一、EmptyResult表示空白的頁面內容
顧名思義,Emty是空白的意思,也就是說這個結果代表了一個空的頁面內容。我們先看一下EmptyResult的執行效果,然后分析他的更能!打開我們的項目“Com.ArHat.Web”。更改一下HomeController的Index方法。

public ActionResult Index()
 {

    return new EmptyResult();
 }

既然是EmptyResult,那么就不需要有一個視圖文件和Index方法名對應。然后我們預覽一下效果:
wps_clip_image-26677

大家可以看到瀏覽器顯示的空的頁面,同時我們查看一下源代碼,發現也是空的。那么Empty既然是空的,那么有什么用呢?這個EmptyResult可以說起到一個中轉的作用,起到適配器的作用,如果我們有些請求只是要求統計一下數量並不需要顯示頁面,則這個Empty就起到了作用。

二、RedirectResult表示定位到另外一個URL
看到這個名字后,我們從名字翻譯過來就是重新定位到一個結果,很顯然就是提到了一個跳轉的作用,主要作用就是要跳轉到其他的網址。我們更改一下HomeController的代碼,我們添加一個About的方法。然后給About方法添加一個視圖文件About.cshtml文件,然后更改Index方法,讓我們瀏覽器預覽Index方法時候,直接跳轉到About動作上。

public class HomeController : Controller
 {

    public ActionResult Index()
     {

        //當然也可以跳轉到其他的網站上,這個是必須的

        //return Redirect("http://www.cnblogs.com/arhat");

        return Redirect("/Home/About");
     }

    public ActionResult About() 
     {

        return View();
     }

}

預覽結果如圖:

wps_clip_image-21231

大家可以看到,我們預覽的是Index,但是由於Index中使用了Redirect()方法,返回的是RedirecResult,所以跳轉到了About了。那么在Controller中,提供了Redirect()方法是專門針對RedirectAction的。我們來看一下這個方法的定義。
protected internal virtual RedirectResult Redirect(string url);

參數url就是要重定向到的url地址。這個方法的作用就是Response.Redirect。

ContentResult表示一個文本內容
同樣的,從名字上我們看到這個是文本內容的結果,這個就有點意思了,為什么呢?大家注意了這里的Content指的是“文本”,還記得老魏曾經給大家見過的”文本”的含義嗎?就是原格式。不會被解析的內容,但是這里的“文本”的含義包含了html,如果是html內容,那么輸出的結果會被解析,但是需要注意的是對於javascript腳本也會被執行。那么這個ContentResult就是這個效果,同樣的,在使用ContentResult的時候也不需要對應的View.說白了這個返回值和下面的兩句話可以說是對等的。

Response.Write(“內容”);
Response.End();

我們來看一個例子吧。修改一下Index的代碼:

public ActionResult Index()
  {

    //return Content("你好啊ContentResult");

    //return Content("<script>alet('你好啊ContentResult')</script>");

    return Content("<font color='red'>你好啊ContentResult</font>");
 }

   那么大家可以運行一下效果,分別取消注釋,大家看看結果是什么!提示一下,注意查看一下運行后的源碼哦!
   當然這里也有一點小技巧,如果大家使用Ajax異步請求的話,返回的值是text類型的,那么大家可以使用這個ContentResult哦。希望大家復習一下老魏教你們的AjaxInvoke這個框架,其實ContentResult實現的原理和AjaxInvoke一樣的。
   從上面我們看到了,我們使用的是Controller提供的Content方法,我們來看一下這個方法的定義:

protected internal ContentResult Content(string content);    

   protected internal ContentResult Content(string content, string contentType);      

   protected internal virtual ContentResult Content(string content, string contentType, Encoding contentEncoding);

       大家可以看到這個方法被重載了3次,作用都是一樣的。第一個我這里就不在講解了。第二個是多一個了參數contentType,用來說明輸入內容的格式。大家可以查看一些MIME類型,但是注意不是所有的MIME類型都被這個方法所支持,僅支持一些表示文本的contentType,比如”text/html”,”text/plain”,”text/xml”等等。
   第三個函數,大家可以看出,無非是聲明一下內容的編碼而已了,這個編碼老魏以前給大家經過,尤其是“三碼合一”這個知識。
   這三個函數,大家可以根據實際情況選擇一下。好了,本章就到這里吧,下一章,我們繼續其他的ActionResult.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM