ASP.NET Core 入門教程 7、ASP.NET Core MVC 分部視圖入門

来源:https://www.cnblogs.com/ken-io/archive/2018/12/21/aspnet-core-tutorial-mvc-view-partial.html
-Advertisement-
Play Games

一、前言 1、本教程主要內容 ASP.NET Core MVC (Razor)分部視圖簡介 ASP.NET Core MVC (Razor)分部視圖基礎教程 ASP.NET Core MVC (Razor)強類型分部視圖教程 2、本教程環境信息 本篇代碼以下代碼進行調整:https://github ...


一、前言

1、本教程主要內容

  • ASP.NET Core MVC (Razor)分部視圖簡介
  • ASP.NET Core MVC (Razor)分部視圖基礎教程
  • ASP.NET Core MVC (Razor)強類型分部視圖教程

2、本教程環境信息

軟體/環境說明
操作系統 Windows 10
SDK 2.1.401
ASP.NET Core 2.1.3
IDE Visual Studio Code 1.30
瀏覽器 Chrome 70

本篇代碼以下代碼進行調整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-06

3、準備工作

VS Code 本身不提供 ASP.NET Core MVC 視圖引擎(Razor)的智能感知。
幸運的是,VS Code C#擴展 從 1.17.0 版本開始支持Razor視圖引擎的智能感知。

所以,我們要將VS Code C#擴展升級到最新版本。

另外,要特意說明的是,在VS Code 1.30版本,解決方案(Solution)視圖的視圖入口改到了側邊工具欄

  image

二、ASP.NET Core MVC (Razor)分部視圖簡介

1、Razor分部視圖概述

在Razor視圖引擎中,我們可以定義.cshtml文件作為“視圖”來渲染需要呈現給用戶的內容。對於所有頁面共用的部分,我們可以定義母版頁(Layout)讓視圖繼承共用的部分。當有些公共的部分我們只在某些頁面用到,不需要每個頁面都用到。或者這個公共的內容需要作為模板使用多次,母版頁就不適合承擔這樣的作用。這時候我們可以使用分部視圖來實現。

2、Razor分部視圖定義與引用

Razor分部視圖定義

視圖與分部視圖在定義上並沒有本質的不同,均是創建.cshtml文件作為視圖使用,只是在渲染的時候作為分部視圖來渲染/載入。

在之前提到過,通常公共的Razor視圖文件名都以_開頭並放在/Views/Shared文件夾中,分部視圖也不例外。

例如:/Views/Shared/_PartialViewTest.cshtml

如果分部視圖只在某個控制器返回的視圖中引用,也可以創建在該控制器對應的視圖目錄。

例如:/Views/Home/_PartialViewTest.cshtml

Razor分部視圖引用

//同步引用

@Html.Partial("_PartialViewTest")


//非同步引用(官方推薦)

@await Html.PartialAsync("_PartialViewTest")

微軟官方更推薦使用非同步載入的方式,因為同步載入可能會出現程式死鎖的情況

如果沒有使用非同步方式,會收到編譯器警告:warning MVC1000: Use of IHtmlHelper.Partial may result in application deadlocks. Consider using <partial> Tag Helper or IHtmlHelper.PartialAsync.

如果你非常在意性能,也可以使用 Html.RenderPartialAsync 呈現分部視圖。 這種方式會直接呈現分部視圖的內容,而不會組裝成 IHtmlContent 對象放回。

@{
    await Html.RenderPartialAsync("_PartialViewTest");
}

由於 Html.RenderPartialAsync並不會返回任何內容,所以需要在Razor語句塊中調用

Razor分部視圖查找順序同視圖相同:

  • Views/[ControllerName]/[PartialViewName].cshtml
  • Views/Shared/[PartialViewName].cshtml

當然,你也可以直接指定完整路徑,例如:

@await Html.PartialAsync("/Views/Home/_PartialViewTest.cshtml")

三、 Razor分部視圖基礎使用

1、定義分部視圖

/Views/Shared目錄下創建視圖 '_DateTimeInfo.cshtml'

當前時間:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") 
當前星期:@DateTime.Now.DayOfWeek

2、創建視圖並引用分部視圖

/Views目錄下創建目錄Partial,併在/Views/Partial 目錄下創建文件 Demo.cshtml

@{
    ViewBag.Title = "PartialView Demo";
}
<h3>@ViewBag.Title</h3>
<p>PartialView Demo by ken.io</p>

@Html.Partial("_DateTimeInfo")

<hr/>

@await Html.PartialAsync("_DateTimeInfo")

3、創建控制器

在 /Controllers 目錄下創建PartialController.cs並創建對應Action

using System;
using Microsoft.AspNetCore.Mvc;

namespace Ken.Tutorial.Web.Controllers
{
    public class PartialController : Controller
    {
        public IActionResult Demo()
        {
            return View();
        }
    }
}

4、訪問測試

啟動項目,訪問 /partial/demo ,將會看到

  image

四、帶參數的Razor分部視圖

1、視圖對象準備

在項目根目錄中創建模型目錄Models,併在下麵創建對象NoteViewModel.cs

using System;

namespace Ken.Tutorial.Web.Models
{
    public class NoteViewModel
    {
        public string Title { get; set; }

        public DateTime PublishTime { get; set; }

        public string Body { get; set; }
    }
}

2、定義分部視圖

/Views/Shared目錄下創建視圖 '_NoteInfo.cshtml'

@model Ken.Tutorial.Web.Models.NoteViewModel;

<h3>@Model.Title</h3>
<span>@Model.PublishTime.ToString("yyyy-MM-dd")</span>
<p>@Model.Body</p>

實際上就是創建強類型分部視圖:-D

3、創建視圖並引用分部視圖

/Views/Partial 目錄下創建文件 DemoWithParams.cshtml

@using Ken.Tutorial.Web.Models;
@{
    ViewBag.Title = "PartialView With Params Demo";
}
<h3>@ViewBag.Title</h3>
<p>PartialView With Params Demo by ken.io</p>

@await Html.PartialAsync("_NoteInfo", new NoteViewModel() { Title = "這是一個分部視圖測試筆記", PublishTime = DateTime.Now, Body = "這是筆記的內容"  })

4、在控制器中編寫對應Action

在控制器 PartialController.cs 中增加以下 Action:

public IActionResult DemoWithParams()
{
    return View();
}

5、訪問測試

啟動項目,訪問 /partial/demowithparams ,將會看到

  image

如果是文章列表頁,用起來會顯得更方便。

五、備註

1、附錄

  • 本文代碼示例

https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-07

  • 本文參考

https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/partial?view=aspnetcore-2.1


本文首發於我的獨立博客:https://ken.io/note/asp.net-core-tutorial-mvc-view-partial


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 flask中有很多可擴展點(筆者這樣稱呼),其中包含了信號和請求鉤子,這些信號和鉤子有什麼用呢?其主要作用用於幫助我們進行程式的耦合性,當然還可以讓我們自定義一些行為。話不多說,通過閱讀源碼,筆者將這些所有的可擴展點的執行順序進行總結(如下圖),這樣我們更能清楚的知道flask的內部請求流 ...
  • #第一個程式print('SigAi')#python 輸入程式name = input('please enter a name')print(name)#list 是可變有序集合#list之可變L = list(['a','b','c'])print(L)L.append('def')print... ...
  • 最近想做個全文搜索,設想用 ASP.NET Web API + Elasticsearch 6.x 來實現。 網上搜了下 Elasticsearch 的資料,大部分是講 linux 平臺下如何用 java 來開發,有少量講在 windows 平臺下用 c# 開發的,且版本是 Elasticsearc ...
  • 線上報來一個問題,說用戶的數據丟失了。開發經過緊張的調查。終於找到了原因。 問題出在了 if 中的比較上。 values[rowIndex] 中保存的是一個整數,開發認為兩個整數比較實用 == 就可以了。 但是 values[rowIndex] 中的整數經過 GetValue返回後被作為 objec ...
  • 既然標題為後續,就要放一下上一篇文章 "使用.Net Core 2.1開發Captcha圖片驗證碼服務" 繼續挖坑 時隔7個月再次繼續自己在GitHub上挖的坑 "https://github.com/PuzzledAlien/Captcha" 在之前翻譯了一片有關如何在.net core中使用Sy ...
  • 方法調用: ...
  • 如何在ADO中使用介面的抽象數據提供程式 在cofig中 appSettings下,配置數據連接類型 使用介面的抽象數據提供程式 ADO.NET數據提供程式工廠模型 .NET數據提供程式工廠模式能讓我們用多種數據訪問類型構建單個代碼庫。而且通過應用程式配置文件(和全新的<connectionstri ...
  • 網上查詢過很多關於ASP.NET core使用SignalR的簡單例子,但是大部分都是簡易聊天功能,今天心血來潮就搞了個使用SignalR進行服務間調用的簡單DEMO。 至於SignalR是什麼我就不多說了,微軟官方文檔也不少。 第一步新建項目 所有VS開發第一步都是新建一個解決方案哈,這裡我就不多 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...