ASP.NET MVC 5 - 控制器

MVC表明: 模型-視圖-控制器 。MVC是一個架構良好而且易於測試和易於維護的開發模式。基於MVC模式的應用程序包含:瀏覽器

Models: 表示該應用程序的數據並使用驗證邏輯來強制實施業務規則的數據類安全

Views: 應用程序動態生成 HTML所使用的模板文件。架構

Controllers: 處理瀏覽器的請求,取得數據模型,而後指定要響應瀏覽器請求的視圖模板。mvc

本系列教程,咱們將覆蓋全部這些概念,並告訴您如何在ASP.NET MVC 5中使用它們來構建應用程序。函數

首先,讓咱們建立一個控制器類。在解決方案資源管理器中,用鼠標右鍵單擊控制器文件夾(Controllers ),而後選擇「添加控制器「工具

clip_image002

在添加Scaffold對話框,單擊MVC5控制器 - ,而後單擊「添加」。學習

clip_image004

命名新的控制器爲「HelloWorldController」,並單擊「 添加「。測試

clip_image006

請注意,在解決方案資源管理器中會建立一個名爲HelloWorldController.cs的新文件和一個新的文件夾Views\HelloWorld。該文件會被IDE默認打開。url

clip_image008

用下面的代碼替換該文件中的內容。spa

using System.Web;
using System.Web.Mvc;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my default action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}

 

在這個例子中控制器方法將返回一個字符串的HTML。本控制器被命名HelloWorldController代碼中的第一種方法被命名爲Index。讓咱們從瀏覽器中調用它。運行應用程序(按F5或CTRL + F5)。在瀏覽器的地址欄中輸入路徑「HelloWorld「。(例如,在下面的示例中: http://localhost:1234/HelloWorld)頁面在瀏覽器中的表現以下面的截圖。在上面的方法中,代碼直接返回了一個字符串。你告訴系統只返回一些HTML,系統確實這樣作了!

clip_image002[4]

ASP.NET MVC會調用不一樣的控制器類(和其內部不一樣的操做方法)這取決於傳入URL。所使用的ASP.NET MVC的默認URL路由邏輯使用這樣的格式來斷定哪些代碼以便調用:

/[Controller]/[ActionName]/[Parameters]

你也可在App_Start/RouteConfig.cs 文件內經過配置URL路由解析規則:

 

 

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 }

);

}

 

若是您運行應用程序並無提供任何URL段的,默認爲「Home」的控制器和「Index」的操做方法,在上面的代碼中的defaults部分指定的:

  • 第一部分的URL肯定哪一個控制器類會被執行。所以 /HelloWorld映射到HelloWorldController控制器類。

  • 第二部分的URL肯定要執行控制器類中的那個操做方法。所以 /HelloWorld/Index會使得HelloWorldController控制器類的Index 方法被執行。請注意,咱們只須要瀏覽 /HelloWorld路徑,默認狀況下會調用Index方法。若是沒有明確的指定操做方法,Index方法會默認的被控制器類調用。

  • 第三部分的URL段(Parameters參數)是路由數據。在本教程中,稍後咱們將看到路由數據。

瀏覽http://localhost:xxxx/HelloWorld/Welcome。Welcome方法會被運行並返回字符串:"This is the Welcome action method...」。 默認的MVC映射爲/[Controller]/[ActionName]/[Parameters] 對於這個URL,控制器類是HelloWorld,操做方法是Welcome,您尚未使用過URL的[Parameters] 部分。

image

讓咱們稍微修改一下這個例子,以即可以使用URL傳遞一些參數信息給控制器類(例如, /HelloWorld/Welcome?name=Scott&numtimes=4)。改變您的Welcome 方法來包含兩個參數,以下所示。須要注意的是,示例代碼使用了C#語言的可選參數功能,numTimes參數在不傳值時,默認值爲1。

 

public string Welcome(string name, int numTimes = 1) {
return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}
安全注意事項: 上面的代碼使用了 HttpServerUtility.HtmlEncode 來保護應用從malacious輸入的(也就是JavaScript). 有關詳細信息,請參閱How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings.

運行您的應用程序並瀏覽此URL(http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4。你能夠對參數name 和numtimes 嘗試不一樣的值。 ASP.NET MVC model binding system 會自動將地址欄中URL裏的 query string映射到您方法中的參數。

clip_image002[6]

上面的例子,沒有用到URL段參數的部分( Parameters)。 經過query strings傳遞name 和 numTimes的參數.

用下面的代碼替換「Welcome」的方法:

 

public string Welcome(string name, int ID = 1)
{
return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}

運行應用程序並輸入如下網址URL: http://localhost:xxx/HelloWorld/Welcome/3?name=Rick

clip_image002[5]

此次URL第三部分的參數匹配了參數ID。

經過查看下面的RegisterRoutes路由規則函數:

 

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 }
);
}

 

在ASP.NET MVC應用程序,經過參數傳遞路由數據是爲更典型的應用(如同上面用query string傳遞 ID參數)。您還能夠增長一條路由來傳遞name 和numtimes ,在路由數據在URL中的參數。在App_Start\RouteConfig.cs file文件中,添加「Hello」的的路由:

public class RouteConfig{
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.

clip_image002[7]

對於衆多MVC應用程序的缺省默認的路由能夠正常工做。稍後您將學習本教程中經過使用模型綁定的數據,你就沒必要修改缺省的路由。

在上面的例子中,控制器一直在作着MVC中「VC」部分的職能:也就是視圖和控制器的工做。該控制器直接返回HTML內容。一般狀況下,您不會讓控制器直接返回HTML,由於這樣代碼會變得很是的繁瑣。相反,咱們一般會使用一個單獨的視圖模板文件來幫助生成返回的HTML。讓咱們來看看下面咱們如何能作到這一點吧。

控制器是MVC中的重要組成部分,有了本節知識的學習,相信你們會更加深刻地理解MVC。那麼在MVC開發過程當中,除了以上知識以外,還能夠藉助哪些工具呢?ComponentOne Studio ASP.NET MVC 是一款針對 MVC 平臺的控件包,它與 Visual Studio 無縫集成,徹底與 MVC6 和 ASP.NET 5.0 兼容,將大幅提升工做效率。

相關文章
相關標籤/搜索