環境與版本

作業系統: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">
            &copy; 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/

This Post Has One Comment

發佈留言