模型-視圖-控制器 (MVC) 數據庫
體系結構模式將應用分紅 3 個主要組件:模型 (M)、視圖 (V) 和控制器 (C)。瀏覽器
模型(M):表示應用數據的類。 模型類使用驗證邏輯來對該數據強制實施業務規則。 一般,模型對象檢索模型狀態並將其存儲在數據庫中。
本教程中,Movie 模型將從數據庫中檢索電影數據,並將其提供給視圖或對其進行更新。 更新後的數據將寫入到數據庫。
視圖(V):視圖是顯示應用用戶界面 (UI) 的組件。 此 UI 一般會顯示模型數據。app
控制器(C):處理瀏覽器請求的類。 它們檢索模型數據並調用返回響應的視圖模板。 在 MVC 應用中,視圖僅顯示信息;
控制器處理並響應用戶輸入和交互。 例如,控制器處理路由數據和查詢字符串值,並將這些值傳遞給模型。 該模型可以使用這些值查詢數據庫。
例如,https://localhost:1234/Home/About 具備 Home(控制器)的路由數據和 About(在 Home 控制器上調用的操做方法)。
https://localhost:1234/Movies/Edit/5 是一個請求,用於經過電影控制器編輯 ID 爲 5 的電影。 本教程的後續部分中將介紹路由數據。
添加控制器ui
在「解決方案資源管理器」中,右鍵單擊「控制器」,而後單擊「添加」>「控制器」
在「添加基架」對話框中,選擇「MVC 控制器 - 空」
在「添加空 MVC 控制器」對話框中,輸入 HelloWorldController 並選擇「ADD」。
將「Controllers/HelloWorldController.cs」的內容替換爲如下內容:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;spa
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
// 指出這是一個 HTTP GET 方法,它經過向基 URL 追加 /HelloWorld/ 進行調用。
// GET: /HelloWorld/ 調試
public string Index()
{
return "This is my default action...";
}code
// 指定一個 HTTP GET 方法,它經過向 URL 追加 /HelloWorld/Welcome/ 進行調用。
// GET: /HelloWorld/Welcome/ 對象
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}教程
在非調試模式下運行應用,並將「HelloWorld」追加到地址欄中的路徑。 Index 方法返回一個字符串。ip
MVC 根據入站 URL 調用控制器類(及其中的操做方法)。 MVC 所用的默認 URL 路由邏輯使用以下格式來肯定調用的代碼:
/[Controller]/[ActionName]/[Parameters]
在 Startup.cs 文件的 Configure 方法中設置路由格式。
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 將觸發 HelloWorldController 類的 Index 運行。
請注意,只需瀏覽到 localhost:xxxx/HelloWorld,而 Index 方法默認調用。 緣由是 Index 是默認方法,若是未顯式指定方法名稱,
則將在控制器上調用它。 URL 段的第三部分 (id) 針對的是路由數據。
瀏覽到 https://localhost:xxxx/HelloWorld/Welcome。 Welcome 方法將運行並返回字符串 This is the Welcome action method...。
對於此 URL,採用 HelloWorld 控制器和 Welcome 操做方法。 目前還沒有使用 URL 的 [Parameters] 部分。
修改代碼,將一些參數信息從 URL 傳遞到控制器。 例如 /HelloWorld/Welcome?name=Rick&numtimes=4。 更改 Welcome 方法以包括如下代碼中顯示的兩個參數:
// 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}");
}
前面的代碼:
使用 C# 可選參數功能指示,未爲 numTimes 參數傳遞值時該參數默認爲 1。
使用 HtmlEncoder.Default.Encode 防止惡意輸入(即 JavaScript)損害應用。
在 $"Hello {name}, NumTimes is: {numTimes}" 中使用內插字符串。
運行應用並瀏覽到:
https://localhost:xxxx/HelloWorld/Welcome?name=Rick&numtimes=4