ASP.NET MVC架構之控制器Controller(四)

來源:互聯網
上載者:User

一,基本概念:
控制器涉及的內容有三部分: 控制器(Controller) 、控制器方法(Action)和 控制器結果(ActionResult)。

傳統的Web架構,如ASP/PHP/ASP.NET Web Forms 等等,請求的URL 地址都是映射到特定的檔案。如,請求的URL 地址,像/Products.aspx 或/Products.php,由 Products.aspx 或Products.php 檔案負責處理。基於Web的MVC架構 映射URL地址 到伺服器端代碼有點不同,不是映射URL 地址到特定檔案,而是映射到類的方法上。這些類就是MVC 中的 Controller 控制器,它們負責處理進來的請求和使用者輸入,接收和儲存資料,並返回結果給用戶端(顯示HTML、下載檔案、或重新導向到不同的URL 等等)。

二,控制器(Controller):
右鍵點擊Web 項目中的Controllers 檔案夾,選擇 添加(Add) ->控制器(Controller),如所示。

在彈出的Add Controller 對話方塊,控制器名稱輸入GuestBookController,點擊Add 按鈕。ok,我們已經在專案檔中添加了GuestBookController.cs 檔案。

代碼如下:
    public class GuestBookController : Controller
    {
        //
        // GET: /GuestBook/

        public ActionResult Index()
        {
            return View();
        }

     }

注意:約定控制器必須以Controller結尾,樣式為xyzController.cs。

三,Action方法:

1,能夠通過URL訪問的Action必須是公有(public)方法;

2,如果標記了[NonAction]屬性,則不能通過URL訪問;
       例如:

        [NonAction]
        public ActionResult Index()
        {
            return View();
        }
不能通過GuestBook/Index來訪問了。

3,預設情況下,Action的方法名就是Action名,Action名指可以通過URL訪問的名稱。
如有需要,您可以指定Action名。例如:

         [ActionName("Default")]
        public ActionResult Index()
        {
            return View("Index");//改變了Action名,就要指定視圖名稱,不指定就會顯示Default視圖檔案。
        }
這樣,您可以通過GuestBook/Default來訪問這個Action了。

4,還有兩個常用的屬性是[HttpPost]和[HttpGet]。例如:

        [HttpPost]
        public ActionResult Index()
        {
            return View();
        }

表示該方法負責處理Http Post動作。
也可以通過 [AcceptVerbs(HttpVerbs.Post)]來設定,[HttpPost]效果一樣,只是方便快速開發。
當對重載的action 方法添加[HttpPost] 屬性後,ASP.NET MVC 根據進來的HTTP 動作,自動分發請求
給合適的action 方法。例如:

       [HttpPost]
        [ActionName("Index")]
        public ActionResult IndexPost()
        {
            return View();
        }
       
        public ActionResult Index()
        {
            return View("Index");
        }

URL請求GuestBook/Index時,如果是Http Post請求,則由名稱為IndexPost的方法執行;其它的請求,則由名稱為Index的方法執行。

如果想瞭解post和get以外更多的參數,請參考(英文):
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
或者搜尋AcceptVerbs。

5,過濾器屬性Action Filter:

可以放置在Action上的另一種類型的屬性是過濾器(Filter)。
使用過濾器可以添加緩衝、 驗證和錯誤處理。
例如[HandleError]屬性。

我們先去掉中的[HandleError]屬性,然後添加如下代碼:
       public ActionResult HandleError()
        {
            throw new Exception("出現異常");
        }
訪問Home/HandleError,出現如,異常頁面暴露了部分原始碼,給網站安全帶來隱患。


現在,我們設定 [HandleError]屬性。

    [HandleError]
    public class HomeController : Controller

然後,在web.config中找到<customErrors>節,把mode設定為"On",去掉注釋。如。

再次運行Home/HandleError,會顯示Shared目錄下的Error.aspx個人化異常頁面。



這是一個過濾器的例子,更多的內容我們將在後面過濾器的章節中詳細說明。

注意:可以將此屬性應用於單獨的一個Action方法上,或者Controller類上,這樣它可以應用於這個控制器類的所有Action.

6,Action方法的參數:
例如URL為:GuestBook/Index/12345,
Index這個Action的代碼為:
        public ActionResult Index(int id)
        {
           int myid=id;
            return View("Index");
        }
我們調試此URL,就會發現,myid的值是12345。
我們並沒有使用類似int id = Convert.ToInt32(Request["id"]);的代碼。

這是因為:
預設情況下,action方法的參數值從請求的資料集合中檢索。
資料集包括,Form、URL Routing Data、QueryString、cookie values等等。
Action 參數的資料首先會從當前請求的form表單中取值,之後是route解析過的route values,最後是從QueryString中取得所前面沒有重複出現過的值。重複出現的以最先取的值為優先。

四,控制器結果(ActionResult):

1,成功執行 MVC 控制器操作會產生從 ActionResult 派生的對象。

2, ActionResult 衍生類別型包括:

ViewResult. 呈現視圖頁給用戶端。由View 方法返回.
EmptyResult. 不寫入HTTP 響應。
RedirectResult. 重新導向到另外一個URL。由 Redirect 方法返回.
RedirectToRouteResult. 重新導向到另外一個Route。由RedirectToAction 和RedirectToRoute 方法返回.
FileContentResult,表示一個可下載的檔案,有File方法返回.
ContentResult.將動作結果作為純文字返回。由 Content 方法返回.
JsonResult. 返回JSON結果。由 Json 方法返回.
JavaScriptResult.返回一個JavaScript對象,由JavaScriptResult方法返回。

3,你也可建立返回任何類型的action方法,如字串、整數、或布爾值等等。在這些傳回值呈現給返迴流之前,將封裝為合適的ActionResult類型。例如,如果設定傳回型別為string或日期,會自動轉換為ContentResult類型結果返回。

下一節中我們將介紹視圖。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.