文章出處

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

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

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

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

本系列教程,我們將覆蓋所有這些概念,并告訴您如何在ASP.NET MVC 5中使用它們來構建應用程序。

首先,讓我們創建一個控制器類。在解決方案資源管理器中,用鼠標右鍵單擊控制器文件夾(Controllers ),然后選擇“添加控制器“

clip_image002

在添加Scaffold對話框,單擊MVC5控制器 - ,然后單擊“添加”。

clip_image004

命名新的控制器為“HelloWorldController”,并單擊“ 添加“。

clip_image006

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

clip_image008

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

 

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“。(例如,在下面的示例中: 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 兼容,將大幅提高工作效率。

-----------------------------------------------------------------------------------------

《ASP.NET MVC 5 入門指南》12篇文章匯總如下:

1. ASP.NET MVC 5 - 開始MVC 5之旅

2. ASP.NET MVC 5 - 控制器

3. ASP.NET MVC 5 - 視圖

4. ASP.NET MVC 5 - 將數據從控制器傳遞給視圖

5. ASP.NET MVC 5 - 添加一個模型

6. ASP.NET MVC 5 - 創建連接字符串(Connection String)并使用SQL Server LocalDB

7. ASP.NET MVC 5 - 從控制器訪問數據模型

8. ASP.NET MVC 5 - 驗證編輯方法(Edit method)和編輯視圖(Edit view)

9. ASP.NET MVC 5 - 給電影表和模型添加新字段

10. ASP.NET MVC 5 - 給數據模型添加校驗器

11. ASP.NET MVC 5 - 查詢Details和Delete方法

12. ASP.NET MVC 5 - 使用Wijmo MVC 5模板1分鐘創建應用

 

希望這些文章對感興趣的朋友有所幫助,另附上PDF版的匯總文檔:

ASP.NET MVC 5 入門指南》PDF版

 

相關閱讀:

微軟 Build 2017 開發者大會:Azure 與 AI 的快速發展

是什么讓C#成為最值得學習的編程語言

從Visual Studio看微軟20年技術變遷

C#開發人員應該知道的13件事情

Visual Studio 2017正式版發布全紀錄

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()