ASP.NET Core 視圖 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程
原文:ASP.NET Core 視圖 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程
ASP.NET Core 視圖
花了幾章節,終於把 ASP.NET Core MVC 中的 C 控制器涉及的七七八八了,本章節我們來學習下 V,也就是視圖部分。
ASP.NET Core MVC 應用程序中,沒有任何內容像頁面,並且在 URL 中指定路徑時, 它也不包含與頁面直接對應的任何內容。 ASP.NET Core MVC 應用程序中最接近頁面的東西被稱為視圖
是不是很拗口,哈哈,頁面就是一個服務器端返回的數據,但這個數據並不是直接存在的,而是由控制器、模型、視圖三大部分相作用的結果。
這是因為,也是你知道的,在 ASP.NET MVC 應用程序中,所有傳入的請求均由控制器處理,並將這些請求映射到控制器相應的方法上
控制器方法可能會返回一個視圖,也可能執行其它類型的操作,例如重定向到另一個控制器方法上
如果使用 MVC 框架,最流行的創建 HTML 的方法是使用 ASP.NET MVC 的 Razor 視圖引擎
為了使用 Razor 視圖引擎,一個控制器方法將產生一個 ViewResult 對象,而一個 ViewResult 可以攜帶我們想要使用的 Razor 視圖的名稱
該視圖是文件系統上的文件,且 ViewResult 還可以將一個模型對象帶到視圖中,且視圖可以在創建 HTML 時使用該模型對象
當 MVC 框架看到控制器方法返回一個 ViewResult 時,框架將在文件系統上查找對應的視圖,執行視圖生成 HTML,然後框架會將這個 HTML 作為響應發送回客戶端
ASP.NET MVC 視圖範例
現在,我們通過一個簡單的範例來了解視圖如何在我們的應用程序中工作
我們將更改 HomeController
類中的 Index
方法,返回一個 ViewResult
對象
完整代碼如下
using System;
using Microsoft.AspNetCore.Mvc;
using HelloWorld.Models;
namespace HelloWorld.Controllers
{
public class HomeController: Controller
{
public ViewResult Index()
{
var employee = new Employee { ID = 1, Name = "語飛"};
return View();
}
}
}
在 HomeController
中,不再是生成 ObjectResult
,而是返回 View()
方法返回的內容
View()
方法不返回 ObjectResult 對象,而是會創建一個新的 ViewResult 對象, 因此我們必須將 Index
方法的返回類型更改為 ViewResult
View()
方法可以接受一些可選的參數,當然了,我們調用這個方法時沒有傳遞任何其它參數
我們保存下文件 HomeController.cs
,重啟應用程序,刷新瀏覽器,顯示結果如下
出錯了,這個錯誤的意思是沒有找到視圖文件 Index.cshtml
不過我們可以從這個錯誤中發現很多有用的信息:
- 默認情況下,視圖查找的路徑,就是在根目錄下的
Views
或Pages
目錄下查找文件 - 默認情況下,C# ASP.NET Core MVC 項目中的視圖以
.cshtml
作為擴展名 - 如果不提供其它任何信息,則視圖位置和視圖文件名將由 ASP.NET MVC 默認決定
- 如果我們需要從 HomeController 的 Index 操作中渲染視圖,那麽 MVC 框架查找該視圖的第一個位置為
Views
文件夾 - 接下來,查找視圖時將會檢查控制器目錄
Home
文件夾,查找名為Index.cshtml
的文件,文件名以Index
開頭,因為我們處於Index
操作中 - 如果在控制器目錄中沒有找到對應視圖,接下來會嘗試在
Shared
文件夾中查找視圖
為了使我們的視圖結果正常工作,我們必須在正確的位置創建這個 Index.cshtml
文件。
因此,在我們的項目中,我們首先需要添加一個包含所有視圖的文件夾,並將其命名為 Views
。
然後在 Views
文件夾中,我們將為與 HomeController
關聯的視圖添加另一個文件夾 Home
這些目錄創建完成後,結果如下
接下來在右鍵點擊 Home
目錄,然後選擇 添加 -> 新建文件 打開新建文件對話框
如果你的電腦是 Windows ,則是 添加 -> 新建項
在新建文件對話框中,選中左邊的 ASP.NET Core,然後選中右邊的 MVC 視圖頁面
如果你的電腦是 Windows ,則是先選中左邊的 ASP.NET Core , 然後選中右邊的 Razor 視圖
在名稱中輸入 Index
或 Index.cshtml
( Windows 上 ),然後點擊右下角的 新建 或 添加 ( Windows 上 ) 創建 Index.cshtml
視圖文件
創建完成後,目錄結構如下
Index.cshtml
中的內容如下
@* For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 *@ @{ }
現在,我們編輯下 Index.cshtml
,輸入以下內容
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Home 控制器下的 Index 方法</title>
</head>
<body>
<h1>歡迎!</h1>
<div>這個消息來自 Home 控制器下的 Index 的視圖文件 index.cshtml </div>
</body>
</html>
我們在 *.cshtml
中輸入了 HTML 標記,這些 .cshtml
中的任何 HTML 標記都會被直接發送到客戶端。
保存 Index.cshtml
文件,重啟應用程序,刷新瀏覽器,可以看到輸出如下
現在,Home 控制器通過 ViewResult
將該視圖以及該 index.cshtml
文件中的所有標記呈現給客戶端
視圖參數
讓我們回到 HomeController
控制器中的 View
方法
View()
方法有幾個不同的重載,我們可以將員工模型作為參數傳遞給它
using System;
using Microsoft.AspNetCore.Mvc;
using HelloWorld.Models;
namespace HelloWorld.Controllers
{
public class HomeController: Controller
{
public ViewResult Index()
{
var employee = new Employee { ID = 1, Name = "語飛"};
return View(employee);
}
}
}
View()
方法只需要一個模型對象,並使用默認視圖,即 Index
這裏,我們只想傳入該模型信息並在 Index.cshtml
中使用該模型
修改 Index.cshtml
,如以下程序中所示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Home 控制器下的 Index 方法</title>
</head>
<body>
<h1>歡迎!</h1>
<div>這個消息來自 Home 控制器下的 Index 的視圖文件 index.cshtml</div>
<div>@Model.Name</div>
</body>
</html>
當我們在 Razor
視圖中使用 @
符號時,Razor
視圖引擎會將我們輸入的任何內容視為 C# 表達式
Razor
視圖包含一些我們可以在 C# 表達式中訪問的內置成員,最重要的成員之一就是模型 ( Model )
但我們使用 @Model
時,意思就是使用從控制器傳入視圖的模型對象,因此 @ Model.Name
則表示在視圖內顯示員工姓名
保存所有的文件,重啟應用程序,刷新瀏覽器,可以看到輸出如下
ASP.NET Core 視圖 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程