ad
此教程的更新版本可在此處使用最新版本的Visual Studio。 新教程使用ASP.NET CORE MVC,這在本教程中提供了許多改進。
本教程介紹具有控制器和檢視的 ASP.NET Core MVC。 Razor 頁面是 ASP.NET Core 2.0 中的一個新選擇,它是基於頁面的程式設計模型,可以實現更簡單、更高效地生成 Web UI。 建議先嚐試 Razor 頁面教程,再使用 MVC 版本。 Razor 頁面教程:
- 易於關注。
- 涵蓋更多功能。
- 是開發新應用程式的首選方法。
以下教程系列介紹了GitHub上的 ASP.NET MVC: Source
- 入門
- 新增控制器
- 新增檢視
- 建立連線字串並使用 SQL Server LocalDB
- 從控制器訪問模型的資料
- 檢查 Edit 方法和編輯檢視
- 新增搜尋
- 新增新欄位
- 新增驗證
- 檢查 Details 和 Delete 方法
MVC 代表模型-檢視-控制器。 MVC 是用於開發應用程式的一種模式,該模式設計良好、可測試且易於維護。 基於 MVC 的應用程式包含:
- M模式:類,這些類表示應用程式的資料,並使用驗證邏輯來強制執行該資料的業務規則。
- V檢視:應用程式用於動態生成 HTML 響應的模板檔案。
- C控制器:用於處理傳入瀏覽器請求、檢索模型資料,然後指定將響應返回到瀏覽器的檢視模板的類。
我們將在本系列教程中介紹所有這些概念,並向您演示如何使用它們來生成應用程式。
首先,讓我們建立一個控制器類。 在解決方案資源管理器中,右鍵單擊 "控制器" 資料夾,然後依次單擊 "新增"、"控制器"。
在 "新增基架" 對話方塊中,單擊 " MVC 5 控制器-空",然後單擊 "新增"。
將新控制器命名為 "HelloWorldController",並單擊 "新增"。
請注意,解決方案資源管理器建立了一個名為HelloWorldController.cs的新檔案和一個新的資料夾Views\HelloWorld
將檔案的內容替換為以下程式碼。
C#複製
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,但確實返回了!
ASP.NET MVC 根據傳入 URL 呼叫不同的控制器類(以及其中的不同操作方法)。 ASP.NET MVC 使用的預設 URL 路由邏輯使用如下格式來確定要呼叫的程式碼:
/[Controller]/[ActionName]/[Parameters]
可以在應用_Start/RouteConfig .cs檔案中設定路由格式。
C#複製
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" 控制器和上述程式碼的 "預設值" 部分中指定的 "索引" 操作方法。
URL 的第一部分確定要執行的控制器類。 因此, /HelloWorld對映到 HelloWorldController
類。 URL 的第二部分確定要執行的類的操作方法。 因此, /HelloWorld/Index將導致執行 HelloWorldController
類的 Index
方法。 請注意,我們只需要瀏覽到 /HelloWorld ,並且預設使用 Index
方法。 這是因為,名為 Index
的方法是將在控制器上呼叫的預設方法,如果未顯式指定一個方法。 URL 段的第三部分 (Parameters
) 針對的是路由資料。 稍後,我們將在本教程中看到路由資料。
瀏覽到 http://localhost:xxxx/HelloWorld/Welcome
。 Welcome
方法將執行並返回字串 "這是歡迎操作方法 ..."。 預設 MVC 對映 /[Controller]/[ActionName]/[Parameters]
。 對於此 URL,採用 HelloWorld
控制器和 Welcome
操作方法。 目前尚未使用 URL 的 [Parameters]
部分。
讓我們略微修改示例,以便可以將一些引數資訊從 URL 傳遞到控制器(例如, /HelloWorld/Welcome? name = Scott&numtimes = 4)。 將 Welcome
方法更改為包含兩個引數,如下所示。 請注意,該程式碼使用C#可選的引數功能,指示如果沒有為該引數傳遞值,則 numTimes
引數應預設為1。
C#複製
public string Welcome(string name, int numTimes = 1) {
return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}
備註
安全說明:上面的程式碼使用httputility.javascriptstringencode來保護應用程式免受惡意輸入(即 JavaScript)的攻擊。 有關詳細資訊,請參閱如何:通過將 HTML 編碼應用於字串來防範 Web 應用程式中的指令碼攻擊。
執行應用程式並瀏覽到示例 URL (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4
)。 可在 URL 中對 name
和 numtimes
使用其他值。 ASP.NET MVC 模型繫結系統自動將命名引數從位址列中的查詢字串對映到方法中的引數。
在上面的示例中,未使用 URL 段(Parameters
),name
和 numTimes
引數作為查詢字串進行傳遞。 ? 上述 URL 中的(問號)是一個分隔符,查詢字串如下所示。 & 字元用於分隔查詢字串。
將歡迎方法替換為以下程式碼:
C#複製
public string Welcome(string name, int ID = 1)
{
return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}
執行應用程式並輸入以下 URL: http://localhost:xxx/HelloWorld/Welcome/1?name=Scott
這次,第三個 URL 段與 route 引數 ID.
Welcome
操作方法包含的引數(ID
)與 RegisterRoutes
方法中的 URL 規範匹配。
C#複製
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 應用程式中,更常見的做法是將引數作為路由資料(就像上面的 ID 那樣)傳遞到查詢字串。 你還可以新增路由,以將引數中的 name
和 numtimes
作為 URL 中的路由資料傳遞。 在應用_Start\RouteConfig.cs檔案中,新增 "Hello" 路由:
C#複製
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
。
對於許多 MVC 應用程式而言,預設路由是正常的。 你將在本教程的後面部分了解如何使用模型繫結器傳遞資料,並且你無需修改該的預設路由。
在這些示例中,控制器已執行 MVC 的 "VC" 部分,即檢視和控制器工作。 控制器將直接返回 HTML。 通常情況下,你不希望控制器直接返回 HTML,因為這會對程式碼非常麻煩。 我們通常會使用單獨的檢視模板檔案來幫助生成 HTML 響應。 接下來,我們來看看如何實現此目的。