ASP.NET Core 入門教程 5、ASP.NET Core MVC 檢視傳值入門
一、前言
1、本教程主要內容
- ASP.NET Core MVC 檢視引擎(Razor)簡介
- ASP.NET Core MVC 檢視(Razor)ViewData使用示例
- ASP.NET Core MVC 檢視(Razor)ViewBag使用示例
- ASP.NET Core NVC 檢視(Razor)強型別傳值(ViewModel)頁示例
2、本教程環境資訊
軟體/環境 | 說明 |
---|---|
作業系統 | Windows 10 |
SDK | 2.1.401 |
ASP.NET Core | 2.1.3 |
IDE | Visual Studio Code 1.28 |
瀏覽器 | Chrome 70 |
本篇程式碼基於以下程式碼進行調整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
3、前置知識
你可能需要的前置知識
- MVC框架/模式介紹
https://baike.baidu.com/item/mvc
4、準備工作
VS Code 本身不提供 ASP.NET Core MVC 檢視引擎(Razor)的智慧感知。
幸運的是,VS Code C#擴充套件 從 1.17.0 版本開始支援Razor檢視引擎的智慧感知。
所以,我們要將VS Code C#擴充套件升級到最新版本。
二、ASP.NET Core MVC 檢視引擎(Razor)簡介
1、ASP.NET Core MVC 檢視引擎(Razor)概述
在MVC架構模式中,檢視引擎/模板引擎負責將控制器(Controller)提供的資料結合檢視模板進行渲染我們需要的格式(通常是HTML)。控制器(Controller)再將渲染的結果返回給請求的客戶端。
在 ASP.NET Core MVC框架中,提供了檢視引擎:Razor。
Razor提供了字尾為.cshtml的檢視模板。Razor檢視模板支援使用Razor標記語言以及C#進行編寫。使用起來非常方便。
Razor 就相當於Java平臺常用的 Freemarker、Thymeleaf
2、Razor檢視模板檔案位置與指定
檢視檔案位置
Razor檢視模板檔案通常放在根目錄Views資料夾對應控制器的子目錄中。
例如: ~/Views/Home/Time.cshtml。
這是因為按照 ASP.NET Core MVC框架的約定,當我們在控制器(Controller)返回一個檢視(return View();
)時,如果只指定了檢視名稱(ViewName),並沒有指定檢視的完成路徑,那麼MVC框架將按照以下順序查詢檢視:
- Views/[ControllerName]/[ViewName].cshtml
- Views/Shared/[ViewName].cshtml
檢視指定方式
- 隱式指定
public class HomeController : Controller
{
public IActionResult Test(){
return View();
}
}
當沒有指定ViewName的時候,ViewName=ActionName="Test";
框架將按照約定順序查詢檢視檔案
- 顯示指定檢視名
public class HomeController : Controller
{
public IActionResult Test(){
return View("Test");
}
public IActionResult TestAbc(){
return View("abc");
}
}
分別手動指定了檢視名;ViewName="Test"、ViewName="abc";
框架將按照約定順序查詢檢視檔案
- 顯示指定檢視檔案
public class HomeController : Controller
{
public IActionResult Test(){
return View("Views/Test.cshtml");
}
}
固定查詢 Views/Test.cshtml 檢視檔案
三、Razor檢視引擎傳遞資料
1、準備工作
- 建立RenderDataController
在Controllers資料夾下新增控制器RenderDataController.cs並繼承於Controller
using System;
using Microsoft.AspNetCore.Mvc;
namespace Ken.Tutorial.Web.Controllers
{
public class RenderDataController : Controller
{
}
}
- 建立對應檢視資料夾
在Views目錄下建立資料夾RenderData
2、弱型別引數傳遞資料
弱型別引數說明
-
ViewData
- 派生自 ViewDataDictionary,因此它有可用的字典屬性,如 ContainsKey、Add、Remove 和 Clear。
- 字典中的鍵是字串,因此允許有空格。 示例:ViewData["ken"]
- 任何非 string 型別均須在檢視中進行強制轉換才能使用 ViewData。
-
ViewBag
- 派生自 DynamicViewData,因此它可使用點表示法 (
@
ViewBag.SomeKey = <value or object>) 建立動態屬性,且無需強制轉換。 - ViewBag 的語法使新增到控制器和檢視的速度更快。
- ViewBag 更易於檢查 NULL 值。 示例:
@
ViewBag.Person?.Name
- 派生自 DynamicViewData,因此它可使用點表示法 (
ViewData使用示例
- 建立Action:ViewDataDemo
public IActionResult ViewDataDemo()
{
ViewData["name"] = "ken";
ViewData["birthday"] = new DateTime(2000, 1, 1);
ViewData["hobby"] = new string[] { "跑步", "閱讀", "Coding" };
return View();
}
- 建立檢視:ViewDataDemo.cshtml
@{
var hobby =ViewData["hobby"] as String[];
}
<h3>@ViewData["title"]</h3>
<ul>
<li>姓名:@ViewData["name"]</li>
<li>生日:@ViewData["birthday"]</li>
<li>愛好:@hobby[0] , @hobby[1]</li>
</ul>
- 訪問測試
啟動專案,訪問 /renderdata/viewdatademo
將會看到:
ViewBag使用示例
- 建立Action:ViewBagDemo
public IActionResult ViewBagDemo()
{
ViewBag.Title = "ViewBag傳值示例";
ViewBag.Name = "ken";
ViewBag.Birthday = new DateTime(2000, 1, 1);
ViewBag.Hobby = new string[] { "跑步", "閱讀", "Coding" };
return View();
}
- 建立檢視:ViewBagDemo.cshtml
@{
var hobby =ViewBag.Hobby as String[];
}
<h3>@ViewBag.Title</h3>
<ul>
<li>姓名:@ViewBag.Name</li>
<li>生日:@ViewBag.Birthday</li>
<li>愛好:@hobby[0] , @hobby[1]</li>
</ul>
- 訪問測試
啟動專案,訪問 /renderdata/viewbagdemo
將會看到:
3、強型別引數傳遞資料
強型別引數說明
檢視強型別通常稱為ViewModel,我們可以在return View();
時指定檢視引數/物件。並在檢視檔案(.cshtml)中通過 @model
語法指定對應的型別,這樣我們可以在檢視檔案(.cshtml)中使用Model
關鍵字來使用傳輸到檢視的該型別的例項。
強型別引數示例
- 建立Person類
在專案根目錄建立Models
資料夾並在檔案中建立Person.cs
using System;
namespace Ken.Tutorial.Web.Models
{
public class Person
{
public string Name { get; set; }
public DateTime Birthday { get; set; }
public string[] Hobby { get; set; }
}
}
- 建立Action:ViewModelDemo
public IActionResult ViewModelDemo()
{
ViewBag.Title = "ViewModel傳值示例";
var person = new Person
{
Name = "ken",
Birthday = new DateTime(2000, 1, 1),
Hobby = new string[] { "跑步", "閱讀", "Coding" }
};
//等同於 return View("ViewModelDemo", person);
return View(person);
}
- 建立檢視:ViewModelDemo.cshtml
@model Ken.Tutorial.Web.Models.Person;
<h3>@ViewBag.Title</h3>
<ul>
<li>姓名:@Model.Name</li>
<li>生日:@Model.Birthday</li>
<li>愛好:@Model.Hobby[0] , @Model.Hobby[1]</li>
</ul>
- 訪問測試
啟動專案,訪問 /renderdata/viewmodeldemo
將會看到:
四、備註
1、附錄
- 本文程式碼示例
https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-05
- 本文參考
https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/overview?view=aspnetcore-2.1
本文首發於我的獨立部落格:https://ken.io/note/asp.net-core-tutorial-mvc-view-renderdata
相關文章
- 【視訊】ASP.NET Core MVC 2.* 入門ASP.NETMVC
- ASP.NET Core 入門教程 2、使用ASP.NET Core MVC框架構建Web應用ASP.NETMVC框架架構Web
- ASP.NET CORE 入門教程(附原始碼)ASP.NET原始碼
- ASP.Net Core 2.2 MVC入門到基本使用系列 (五)ASP.NETMVC
- ASP.NET Core MVC 入門到精通 - 3. 使用MediatRASP.NETMVC
- Blazor入門:ASP.NET Core Razor 元件BlazorASP.NET元件
- ASP.NET Core MVC 之檢視(Views)ASP.NETMVCView
- Asp.Net Core入門之配置檔案ASP.NET
- Asp.Net Core Grpc 入門實踐ASP.NETRPC
- Redis 入門與 ASP.NET Core 快取RedisASP.NET快取
- ASP.NET Core MVC 和 Visual Studio入門(四)新增模型ASP.NETMVC模型
- ASP.NET Core MVC上傳、匯入、匯出知多少ASP.NETMVC
- Asp.Net Core入門之靜態檔案ASP.NET
- Asp.Net Core學習筆記:入門篇ASP.NET筆記
- ASP.Net Core 3.1 使用gRPC入門指南ASP.NETRPC
- 【.NET Core】ASP.NET Core之IdentityServer4(1):快速入門ASP.NETIDEServer
- ASP.NET Core MVC 和 Visual Studio入門(五) 使用 SQL Server LocalDBASP.NETMVCSQLServer
- ASP.NET Core MVC 上傳、匯入、匯出功能詳解ASP.NETMVC
- Asp.Net Core入門之自定義中介軟體ASP.NET
- 【視訊】Entity Framework Core 2.* 入門教程Framework
- ASP.NET MVC 5 Web程式設計1 -- 入門ASP.NETMVCWeb程式設計
- Asp.Net Core入門之自定義服務註冊ASP.NET
- 【asp.net core 系列】13 Identity 身份驗證入門ASP.NETIDE
- ASP.NET Core MVC 之區域性檢視(Partial Views)ASP.NETMVCView
- EF Core 二 、 入門 EF Core
- ASP.NET MVC4 入門簡介ASP.NETMVC
- asp.net core mvc 分頁ASP.NETMVC
- [譯]ASP.NET Core 2.0 檢視引擎ASP.NET
- [譯]ASP.NET Core 2.0 部分檢視ASP.NET
- [譯]ASP.NET Core 2.0 檢視元件ASP.NET元件
- Asp.NET Core2.0 專案實戰入門視訊課程_完整版ASP.NET
- .Net Core 2.0 EntityFrameworkCore CodeFirst入門教程Framework
- ASP.NET Web API 2 入門教程ASP.NETWebAPI
- Asp.Net MVC2.0 Url 路由入門(轉)ASP.NETMVC路由
- ASP.NET Core MVC 之模型(Model)ASP.NETMVC模型
- 【備忘】ASP.NET MVC 5 升級到 ASP.NET Core MVC 的部分變化ASP.NETMVC
- 《Asp.Net Core3 + Vue3入坑教程》 - 4.EF Core & PostgresqlASP.NETVueSQL
- ASP.NET + MVC5 入門完整教程三 (上) --- 第一個 MVC 專案_lingshuangcanxue-CSDN 部落格_asp.net mvcASP.NETMVCGC