W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
模型-視圖-控制器 (MVC) 體系結構模式將應用分成 3 個主要組件:模型 (M)、視圖 (V) 和控制器 (C)。MVC 模式有助于創(chuàng)建比傳統(tǒng)單片應用更易于測試和更新的應用。 基于 MVC 的應用包含:
MVC 模式可幫助創(chuàng)建分隔不同應用特性(輸入邏輯、業(yè)務邏輯和 UI 邏輯)的應用,同時讓這些元素之間實現(xiàn)松散耦合。 該模式可指定應用中每種邏輯的位置。 UI 邏輯位于視圖中。 輸入邏輯位于控制器中。 業(yè)務邏輯位于模型中。 這種隔離有助于控制構建應用時的復雜程度,因為它可用于一次處理一個實現(xiàn)特性,而不影響其他特性的代碼。 例如,處理視圖代碼時不必依賴業(yè)務邏輯代碼。
本教程系列中介紹了這些概念,并展示了如何使用它們構建電影應用。 MVC 項目包含“控制器”和“視圖”文件夾。
在“解決方案資源管理器”中,右鍵單擊“控制器”,然后單擊“添加”>“控制器”
在“添加基架”對話框中,選擇“MVC 控制器 - 空”
在“添加空 MVC 控制器”對話框中,輸入 HelloWorldController 并選擇“ADD”。
將“Controllers/HelloWorldController.cs”的內容替換為以下內容:
C#
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
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...";
}
}
}
控制器中的每個 public 方法均可作為 HTTP 終結點調用。 上述示例中,兩種方法均返回一個字符串。 請注意每個方法前面的注釋。
HTTP 終結點是 Web 應用程序中可定向的 URL(例如 https://localhost:5001/HelloWorld),其中結合了所用的協(xié)議 HTTPS、TCP 端口等 Web 服務器的網絡位置 localhost:5001,以及目標 URI HelloWorld。
第一條注釋指出這是一個 HTTP GET 方法,它通過向基 URL 追加 /HelloWorld/ 進行調用。 第二條注釋指定一個 HTTP GET 方法,它通過向 URL 追加 /HelloWorld/Welcome/ 進行調用。 本教程稍后將使用基架引擎生成 HTTP POST 方法,用于更新數(shù)據。
在非調試模式下運行應用,并將“HelloWorld”追加到地址欄中的路徑。 Index 方法返回一個字符串。
MVC 根據入站 URL 調用控制器類(及其中的操作方法)。 MVC 所用的默認 URL 路由邏輯使用如下格式來確定調用的代碼:
/[Controller]/[ActionName]/[Parameters]
在 Startup.cs 文件的 Configure 方法中設置路由格式。
C#
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
如果瀏覽到應用且不提供任何 URL 段,它將默認為上面突出顯示的模板行中指定的“Home”控制器和“Index”方法。
第一個 URL 段決定要運行的控制器類。 因此 localhost:xxxx/HelloWorld 映射到 HelloWorldController 類。 該 URL 段的第二部分決定類上的操作方法。 因此 localhost:xxxx/HelloWorld/Index 將觸發(fā) HelloWorldController 類的 Index 運行。 請注意,只需瀏覽到 localhost:xxxx/HelloWorld,而 Index 方法默認調用。 原因是 Index 是默認方法,如果未顯式指定方法名稱,則將在控制器上調用它。 URL 段的第三部分 (id) 針對的是路由數(shù)據。 本教程的后續(xù)部分中將介紹路由數(shù)據。
瀏覽到 https://localhost:xxxx/HelloWorld/Welcome。 Welcome 方法將運行并返回字符串 This is the Welcome action method...。 對于此 URL,采用 HelloWorld 控制器和 Welcome 操作方法。 目前尚未使用 URL 的 [Parameters] 部分。
修改代碼,將一些參數(shù)信息從 URL 傳遞到控制器。 例如 /HelloWorld/Welcome?name=Rick&numtimes=4。 更改 Welcome 方法以包括以下代碼中顯示的兩個參數(shù):
C#
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}
前面的代碼:
運行應用并瀏覽到:
https://localhost:xxxx/HelloWorld/Welcome?name=Rick&numtimes=4
(將 xxxx 替換為端口號。)可在 URL 中對 name 和 numtimes 使用其他值。 MVC 模型綁定系統(tǒng)可將命名參數(shù)從地址欄中的查詢字符串自動映射到方法中的參數(shù)。 有關詳細信息,請參閱模型綁定。
在上圖中,未使用 URL 段 (Parameters),且 name 和 numTimes 參數(shù)作為查詢字符串進行傳遞。 上述 URL 中的 ?(問號)為分隔符,后接查詢字符串。 & 字符用于分隔查詢字符串。
將 Welcome 方法替換為以下代碼:
C#
public string Welcome(string name, int ID = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}
運行應用并輸入以下 URL:https://localhost:xxx/HelloWorld/Welcome/3?name=Rick
此時,第三個 URL 段與路由參數(shù) id 相匹配。 Welcome 方法包含 MapRoute 方法中匹配 URL 模板的參數(shù) id。 后面的 ?(id? 中)表示 id 參數(shù)可選。
C#
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
上述示例中,控制器始終執(zhí)行 MVC 的“VC”部分,即視圖和控制器工作。 控制器將直接返回 HTML。通常不希望控制器直接返回 HTML,因為編碼和維護非常繁瑣。 通常,需使用單獨的 Razor 視圖模板文件來幫助生成 HTML 響應。 可在下一教程中執(zhí)行該操作。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: