起飛網 ASP.NET MVC 5 學習教程目錄:
- 添加控制器
- 添加視圖
- 修改視圖和布局頁
- 控制器傳遞數據給視圖
- 添加模型
- 創建連接字符串
- 通過控制器訪問模型的數據
- 生成的代碼詳解
- 使用 SQL Server LocalDB
- Edit方法和Edit視圖詳解
- 添加查詢
- Entity Framework 數據遷移之添加字段
- 添加驗證
- Details 和 Delete 方法詳解
MVC代表了模型-視圖-控制器。MVC是一個架構良好,可測試性和易於維護的應用程序開發模式。基於MVC模式的應用程序包含:
- 模型:模型類代表了應用程序中的數據,為強制執行業務規則使用了數據邏輯驗證。
- 視圖:應用程序中的視圖模板文件用來動態生成HTML響應。
- 控制器:控制器類處理傳入的瀏覽器請求,獲取模型數據,然后指定視圖模板,將響應返回給瀏覽器。
我們將在本教程系列涵蓋了所有這些概念,並告訴你如何使用它們來構建應用程序。
首先,讓我們創建一個控制器類。在“解決方案資源管理器”中,右鍵“Controllers”文件夾,然后選擇“添加”>“支架”:
圖1:添加控制器的菜單
在添加支架對話框中,選擇“MVC 5 Controller - Empty”,然后單擊“添加”按鈕:
圖2:添加支架對話框
在Controller Name中輸入“HelloWorldController”,單擊“Add”按鈕:
圖3:添加控制器對話框
此時在“解決方法資源管理器”中已經新建了文件 HelloWorldController.cs。該文件在IDE中是打開的。
圖4:HelloWorldController.cs
使用以下代碼替換文件內容:
代碼清單1:HelloWorldController.cs
using System.Web; using System.Web.Mvc; namespace MvcMovie.Controllers { public class HelloWorldController : Controller { // // GET: /HelloWorld/ public string Index() { return "This is my <b>default</b> action..."; } // // GET: /HelloWorld/Welcome/ public string Welcome() { return "This is the Welcome action method..."; } } }
控制器方法將返回一個HTML字符串作為例子。控制器名為 HelloWorldController,上面的第一個方法名為 Index,讓我們在瀏覽器中調用一下看:運行應用程序(按F5 或 CTRL+F5),在瀏覽器地址欄中追加“HelloWorld”(例如,在下面的圖5中,地址欄內容為localhost:2264/HelloWorld)。瀏覽器中的頁面效果如圖5:
圖5:瀏覽器中查看 HelloWorld
ASP.NET MVC 根據傳入的URL調用不同的控制器(還有不同的操作方法),ASP.NET MVC 默認的路由規則決定了調用那些代碼:
/[Controller]/[ActionName]/[Parameters]
你可以在 App_Start/RouteConfig.cs 文件中設置路由格式。
代碼清單2:默認路由代碼
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
在代碼清單2中,當你運行程序,且不提供任何URL片段的時候,默認調用 Home 控制器的 Index 方法。
URL第一部分決定了要調用的控制器,/HelloWorld 對應的是 HelloWorldController 類。第二部分決定了被調用的Action方法,因此 /HelloWorld/Index 引發調用了HelloWorldController 類的Index 方法。雖然我們瀏覽的地址是/HelloWorld,但是Index方法是默認的Action,所以Index方法會被調用。URL的第三部分是數據部分,我們將在后面的章節中介紹路由數據。
瀏覽地址: http://localhost:xxxx/HelloWorld/Welcome,Welcome方法被執行,返回字符串“This is the Welcome action method...”。MVC的默認映射是 /[Controller]/[ActionName]/[Parameters]
。對於這個URL,控制器是HelloWorld,Welcome 是執行的方法。我們還沒有在地址中使用[Parameters]
部分。
圖6:瀏覽器中查看Welcome
讓我們稍微修改一下例子,使你能夠從URL中傳遞參數給控制器(例如,/HelloWorld/Welcome?name=Scott&numtimes=4)。修改Welcome方法,讓它包含兩個參數。請注意,該代碼使用C#的可選參數功能,表明的numTimes參數如果參數傳遞,那么默認為1。修改后的代碼如下:
代碼清單3:修改后的Welcome方法
public string Welcome(string name, int numTimes = 1) { return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes); }
運行程序,在瀏覽器中輸入示例URL(http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。你可以在URL中為name和numtimes試試不同的值,ASP.NET MVC 模型綁定系統自動將地址中命名的查詢參數映射為方法中的參數。
圖7:瀏覽器中查看帶參數的Welcome
在上面的例子中,URL的參數部分沒有用到,參數 name 和 numTimes 是作為查詢字符串傳遞的。
使用下面的代碼替換Welcome方法:
代碼清單4:Welcome方法代碼
public string Welcome(string name, int ID = 1) { return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID); }
運行程序,並瀏覽下面的地址: http://localhost:xxx/HelloWorld/Welcome/3?name=Rick
圖8:使用了參數部分的Welcome
這次的URL第三部分匹配了參數 ID,因為Welcome 方法中有一個參數ID,這個URL正好與RegisterRoutes中的規范匹配。此處可以參見代碼清單2中的默認路由規則。
在ASP.NET MVC 應用程序中,像我們使用路由數據傳遞參數,比用查詢字符串傳遞參數更為典型。你還可以定一個路由,通過路由數據使用URL同時傳遞name和numTimes兩個參數。在App_Start\RouteConfig.cs 文件中,添加一個名為“Hello”的路由:
代碼清單5:添加Hello路由
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "Hello", url: "{controller}/{action}/{name}/{id}" ); }
在瀏覽器中查看地址 localhost:XXX/HelloWorld/Welcome/Scott/3:
圖9:同時傳遞兩個參數
在大多數MVC應用程序中,默認的路由都可以很好的工作。你會在本教程的后續章節中學習通過模型綁定傳遞參數,並且你不用修改默認的路由。
在這些例子中,控制器做了MVC中“VC”部分的工作,這說明視圖和控制器工作了。控制器直接返回了HTML。通常我們不想控制器直接返回HTML,因為代碼變得非常麻煩。相反,我們通常會使用一個單獨的視圖模板文件來幫助生成HTML響應。我們會在后面的章節中介紹這些內容。
本文轉自起飛網,原文地址:http://www.qeefee.com/mvc/mvc-5-adding-a-controller