1. 程式人生 > >ASP.NET Core 視圖 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

ASP.NET Core 視圖 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

參數傳遞 文件 htm 代碼 關聯 ide sof info 內容

原文: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

不過我們可以從這個錯誤中發現很多有用的信息:

  1. 默認情況下,視圖查找的路徑,就是在根目錄下的 ViewsPages 目錄下查找文件
  2. 默認情況下,C# ASP.NET Core MVC 項目中的視圖以 .cshtml 作為擴展名
  3. 如果不提供其它任何信息,則視圖位置和視圖文件名將由 ASP.NET MVC 默認決定
  4. 如果我們需要從 HomeController 的 Index 操作中渲染視圖,那麽 MVC 框架查找該視圖的第一個位置為 Views文件夾
  5. 接下來,查找視圖時將會檢查控制器目錄 Home 文件夾,查找名為 Index.cshtml的文件,文件名以 Index 開頭,因為我們處於 Index 操作中
  6. 如果在控制器目錄中沒有找到對應視圖,接下來會嘗試在 Shared 文件夾中查找視圖

為了使我們的視圖結果正常工作,我們必須在正確的位置創建這個 Index.cshtml 文件。

因此,在我們的項目中,我們首先需要添加一個包含所有視圖的文件夾,並將其命名為 Views

然後在 Views 文件夾中,我們將為與 HomeController 關聯的視圖添加另一個文件夾 Home

這些目錄創建完成後,結果如下

技術分享圖片

接下來在右鍵點擊 Home 目錄,然後選擇 添加 -> 新建文件 打開新建文件對話框

如果你的電腦是 Windows ,則是 添加 -> 新建項

技術分享圖片

在新建文件對話框中,選中左邊的 ASP.NET Core,然後選中右邊的 MVC 視圖頁面

如果你的電腦是 Windows ,則是先選中左邊的 ASP.NET Core , 然後選中右邊的 Razor 視圖

技術分享圖片

在名稱中輸入 IndexIndex.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 基礎教程 - 簡單教程,簡單編程