環境與版本
作業系統:Window10 64x 版本:2004
開發軟件(IDE):Visual Studio 2019 Community
.NET版本:ASP.NET Core 3.1
專案架構:MVC
範本參考
繼上篇 [C#學習]ASP.NET CORE MVC 控制器(CONTROLLERS) 使用與範本 進行延續學習使用範本
新增檢視
在 Controller/HelloWorldController.cs 類別中,以下列程式碼取代 Index 方法:
public IActionResult Index() { return View(); }
會呼叫控制器的 View 方法。
會傳回 IActionResult (或衍生自 ActionResult 的類別)
在Views 資料夾下,創建資料夾 HelloWorld 並創建 index.cshtml
註:.cshtml 為 微軟的項目Razor頁面。
下列內容取代 Views/HelloWorld/Index. cshtml 的檔案內容
@{ ViewData["Title"] = "Index"; } <h2>Index</h2> <p>Hello from our View Template!</p>
GET:/HelloWorld
變更配置檔案中的標題、頁尾及功能表連結
以下資料代替Views/Shared/_Layout. cshtml 的檔案內容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>@ViewData["Title"] - Movie App</title> <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" /> <link rel="stylesheet" href="~/css/site.css" /> </head> <body> <header> <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3"> <div class="container"> <a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> </li> </ul> </div> </div> </nav> </header> <div class="container"> <main role="main" class="pb-3"> @RenderBody() </main> </div> <footer class="border-top footer text-muted"> <div class="container"> © 2020 - Movie App - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> </div> </footer> <script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> <script src="~/js/site.js" asp-append-version="true"></script> @RenderSection("Scripts", required: false) </body> </html>
每個頁面會顯示相同的功能表配置。 功能表配置是在 Views/Shared/_Layout.cshtml 檔案中實作。
第34行,@RenderBody 是顯示您建立之所有檢視特定頁面的預留位置
選取 Privacy 連結。 請注意,瀏覽器索引標籤上的標題會顯示 Privacy Policy – Movie App,而不是 Privacy Policy – MvcMovie:
查看Views/_ViewStart.cshtml 檔案:
@{ Layout = "_Layout"; }
Views/_ViewStart.cshtml 檔案會將 Views/Shared/_Layout.cshtml 檔案引入每一個View的頁面。
變更 Views/HelloWorld/Index.cshtml 檢視檔案的標題和元素:
@{ ViewData["Title"] = "Movie List"; } <h2>My Movie List</h2> <p>Hello from our View Template!</p>
GET:/HelloWorld
Index.cshtml 檢視範本中的內容已與 Views/Shared/_Layout.cshtml 檢視範本合併。
將資料從控制器傳遞至檢視
在Controller/HelloWorldController.cs加入以下7~13行內容
namespace MvcMovie.Controllers { public class HelloWorldController : Controller {// // GET: /HelloWorld/Welcome/ public IActionResult Welcome(string name, int numTimes = 1) { ViewData["Message"] = "Hello " + name; ViewData["NumTimes"] = numTimes; return View(); } } }
建立名為 Views/HelloWorld/Welcome.cshtml 的 Welcome 檢視範本。
使用下列內容取代 Views/HelloWorld/Welcome.cshtml 的內容:
@{ ViewData["Title"] = "Welcome"; } <h2>Welcome</h2> <ul> @for (int i = 0; i < (int)ViewData["NumTimes"]; i++) { <li>@ViewData["Message"]</li> } </ul>
GET:/HelloWorld/Welcome?name=jack&numtimes=5
參考資料:
第3部分:將視圖新增至 ASP.NET Core MVC 應用程式:https://docs.microsoft.com/zh-tw/aspnet/core/tutorials/first-mvc-app/adding-view?view=aspnetcore-3.1&tabs=visual-studio
何時應該使用 ViewBag、ViewData 或 TempData:https://rachelappel.com/2014/01/02/when-to-use-viewbag-viewdata-or-tempdata-in-asp-net-mvc-3-applications/
Pingback: [C#學習]ASP.NET Core MVC 模型(Models) 使用與範本 - Steven玄