在錯誤中學習ASP.NET MVC 第 10 篇 - 認識Controller - 加入控制器

 在上一篇稍微了解Controller與Url的關係之後,接下來就說明如何建立一個新的Controller,在Controller資料夾按右鍵>加入>控制器



接著命名Controller的名稱,在這邊可以看到Default1被反白,就是提示這邊的字串是需要修改的喔,然後記得一定要是Controller結尾



接著輸入把Default1Controller改成TestController之後就會看到一個空白的MVC控制器被建立了,除了Controller名稱一定要是Controller結尾,透過觀察程式碼,發現還必須是公開類別,而且要繼承System.Web.Mvc.Controller類別。

另外也可以觀察到裡面預設會內建一個名稱為Index的Action



此時我們按Ctrl+F5偵錯專案,來存取TestController中的Index會是什麼結果,看過上篇解說之後應該知道Url要打什麼才能存取到TestController中的Index了吧XD



結果發生錯誤了!在說明錯誤之前,不知道有沒有發現到Url好像有點怪怪的,前一篇有說到路由衷的定義是{contorller}/{action},為什麼上面的網址只有controller的名稱,發生錯誤是很正常的吧?我們再來看一次RouteConfig.cs



我們可以觀察到上圖中的黃色框框有一個預設值,如果今天url沒有包含action資訊,路由會預設存取Index這個Action,所以今天存取 http://localhost/Test/Index 與 http://localhost/Test/ 是一樣的結果喔,若今天url只打http://localhost/為什麼會去存取HomeController中的Index也是因為預設值的關係。

以前開發MVC專案都沒有特別去注意路由,反正感覺上就是加上Controller與Action就能存取到了,完全沒想過要去研究url為什麼是這樣設定,一直到了專案需要實作權限管控的功能,例如透過DB中的Table去設定某些使用者的角色可以存取的url路徑有哪些這樣,但那些設定跟實際專案的url路徑長得太不一樣,所以必須夠過去更改路由設定才有辦法符合權限管控Table設定的值,所以現在我開發專案都會特別注意Controller與url的關係,不然到專案後期才發現url格式不是最理想的,才在那邊大改路由的設定真的會瘋掉。

說了這麼多還是沒有提到為什麼Test中的Index會有錯誤訊息,就留著明天再繼續講吧XD

留言

這個網誌中的熱門文章

CPE 一顆星選集題目說明與解答 - Java 筆記與心得分享

Visual Studio 自動排版格式化程式碼

1. Vito's family (CPE10406, UVA10041) - CPE一顆星解答與說明