ASP.NET Core 入门笔记8,ASP.NET Core MVC 分部视图入门
一、前言
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)视图的视图入口改到了侧边工具栏

二、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 ,将会看到

四、带参数的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 ,将会看到

如果是文章列表页,用起来会显得更方便。
摘抄自:https://www.cnblogs.com/ken-io/p/aspnet-core-tutorial-mvc-view-partial.html
ASP.NET Core 入门笔记8,ASP.NET Core MVC 分部视图入门的更多相关文章
- ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Raz ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 动态数据的呈现
https://www.cnblogs.com/cynchanpin/p/7065098.html 在MVC3開始.视图数据能够通过ViewBag属性訪问.在MVC2中则是使用ViewData.MVC ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 Areas区域说明
https://www.cnblogs.com/webapi/p/5976642.html Asp.Net MVC Areas区域说明 一般网站分为前台+会员后台+管理员后台,做过webform的 ...
- git入门笔记汇总——(廖雪峰博客git入门)
本文内容是对廖雪峰老师Git教程做的笔记,外加一些自己的学习心得,还抱着学以致用的心态来实践一番 如有显示错误 请移步本人github:git教程小结 Git学习笔记 Git简介 安装Git 创建版本 ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 视图引用资源
https://www.cnblogs.com/Roxlin/p/5615144.html 一.配置BundleConfig.cs文件 1.首先要在App_Start 里面BundleConfig.c ...
- ASP.NET MVC 分部视图
@model PartViewDemo.Models.HomeInfo@using PartViewDemo.Models;@{ ViewBag.Title = "Index";} ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 视图模板页
https://www.cnblogs.com/xlhblogs/archive/2013/06/09/3129449.html MVC Razor模板引擎 @RenderBody.@RenderPa ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 HtmlHelper-超链接方法
一.@Html.ActionLink()概述 在MVC的Rasor视图引擎中,微软采用一种全新的方式来表示从前的超链接方式,它代替了从前的繁杂的超链接标签,让代码看起来更加简洁.通过浏览器依然会解析成 ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2
https://www.bbsmax.com/A/gAJG67OXzZ/ 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASP ...
随机推荐
- MyPlayer
简单播放器 MyQueue.h #pragma once #include <Windows.h> #include <vector> #include <SDL.h&g ...
- no suitable method found to override
no suitable method found to override http://bbs.csdn.net/topics/200001058
- Java程序基本结构
/** * 可以用来自动创建文档的注释 */ public class Hello { public static void main(String[] args) { // 向屏幕输出文本: Sys ...
- ETL测试场景和测试用例设计
前段时间做了些数据测试相关的工作,找了些相关方面的资料,也跟一些一线厂的同学聊了下数据测试方面的东西,然后在团队内部形成了一个初级的数据测试的规范流程以及测试需要进行的场景设计和测试用例设计的方案. ...
- NSNull
集合中是不能放nil值的,因为nil是结尾,但是为了存放表示什么都没有的值,可以使用NSNull,它也是NSObject的一个子类. void null(){ NSNull *nl=[NSNull n ...
- Linux 系统设置命令之ulimit
定义 ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小.进程数据块的大小.Shell 进程创建文件的大小.内存锁住的大小.常驻内存集的大小.打开 ...
- 在linux写一个shell脚本用maven git自动更新代码并且打包部署
服务器上必须安装了git maven jdk 并且配置好环境变量 实际服务器中可能运行着多个Java进程,所以重新部署的时候需要先停止原来的java进程,写一个按照名称杀死进程的脚本 kill.sh ...
- mysql delete别名
有一个表的数据比较大,然后需要进行关联删除,删除的时候发现如下SQL报错:ELETE FROM test.test1 a WHERE EXISTS (SELECT 1 FROM test.test2 ...
- java随机生成6位随机数 5位随机数 4位随机数
随机数,应用会相当广,验证数,订单号,流水号拼接. 下面是java随机数生成语句: 生成6位随机数(不会是5位或者7位,仅只有6位): System.+)*)); 同理,生成5位随机数: System ...
- Leetcode题目236.二叉树的最近公共祖先(中等)
题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先 ...