ASP.NET Core 入门教程 7、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 (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

posted on 2018-12-21 22:13 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/10159248.html

ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门相关推荐

  1. 网络安全工程师入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

    前言 想要成为网络安全工程师,却苦于没有方向,不知道从何学起的话,下面这篇 网络安全入门 教程可以帮你实现自己的网络安全工程师梦想,如果想学,可以继续看下去,文章有点长,希望你可以耐心看到最后! 1. ...

  2. python零基础入门教程免费版_毫无基础的人如何入门 Python ?Python入门教程拿走不谢啦!...

    随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?这里整理了一些个人经验和Python入门教程供大家参考. 如果你是零基 ...

  3. Android入门教程四十六之ViewFlipper(翻转视图)的基本使用

    本节给大家带了的是ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放! 和ViewPager不同,ViewPager是一页页的,而ViewFlipper则是一层层的,和 ...

  4. 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了!

    想要成为黑客/红客,却苦于没有方向,不知道从何学起,下面这篇网络安全入门教程可以帮你实现自己的黑客梦想,如果想学,可以继续看下去,文章有点长,希望你可以耐心看到最后 网络安全入门路线 Web安全相关概 ...

  5. 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

    这篇文章没有什么套路.就是一套自学理论和方向,具体的需要配合网络黑白去学习.毕竟是有网络才会有黑白! 有自学也有培训! 1.打死也不要相信什么分分钟钟教你成为大黑阔的,各种包教包会的教程,就算打不死也 ...

  6. Kali Linux入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。

    作为一名从事渗透测试的人员,不懂Kali Linux的话,就out了.它预装了数百种享誉盛名的渗透工具,使你可以更轻松地测试.破解以及进行与数字取证相关的任何其他工作. 今天给大家分享一套Kali L ...

  7. 黑客入门教程(非常详细)从零基础入门到精通

    1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多google,baidu,我们往往都遇不到好心的大 ...

  8. kuka机器人焊接编程入门教程_套装 官方正版 KUKA工业机器人从入门到精通 共3册 库卡 基础入门与应用案例精析 编程高级教程 编程与实操技巧...

    <KUKA工业机器人基础入门与应用案例精析> 本书基于作者多年与KUKA机器人相关的从业经验来编写,全书共7章,主要围绕KUKA机器人的机械.电气.操作.配置软件.编程软件以及应用等方面展 ...

  9. Python入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

    前言 本文罗列了了python零基础入门到精通的详细教程,内容均以知识目录的形式展开. 第一章:python基础之markdown Typora软件下载 Typora基本使用 Typora补充说明 编 ...

  10. 网络安全入门教程(超级详细)从零基础入门到精通,看这一篇就够了。

    前言 随着Web技术发展越来越成熟,而非Web服务越来越少的暴露在互联网上,现在互联网安全主要指的是Web安全. 为了自身不"裸奔"在大数据里,渐渐开始学习Web安全,在学习Web ...

最新文章

  1. Prism For WPF Login对话框又简单又合理的方案之一
  2. SpringBoot实战(五)之Thymeleaf
  3. python supervisor flask_supervisor配合uwsgi部署flask应用
  4. 飞秋(FeiQ)已在计算机技术的世界里沉浸了十年
  5. 剑指offer0JZ81 调整数组顺序使奇数位于偶数前面(二)(C++,附思路)
  6. linux so获取自己路径,linux下so获得自己文件位置的路径
  7. Copy(定义,特点,深复制,浅复制)(非ARC,ARC的运用范围)
  8. 知乎披露会员业务未来布局,融合社区内容深耕垂直领域
  9. 剑指offer——面试题46:求1+2+...+n
  10. java阅卷系统_基于jsp的考试阅卷系统-JavaEE实现考试阅卷系统 - java项目源码
  11. 科大奥锐密立根油滴实验数据_密立根油滴实验原始数据记录表
  12. PEEKABOO——测试随笔
  13. android app文件夹,android app文件目录结构
  14. 用PIL制作黑白滤镜
  15. python中用于绘制各种图形、标注文本_在python中的图形上绘制常量文本-问答-阿里云开发者社区-阿里云...
  16. 修改ubuntu桌面路径
  17. 计算机专业要用多大显卡,吃鸡需要什么级别的显卡?或许跟你想的不太一样!...
  18. Linux使用tc模拟网络延迟和丢包
  19. PowerDesigner数据建模
  20. 并查集解决朋友圈问题

热门文章

  1. Aspose.Word
  2. 博客改版日记9.7——内测先锋队总动员
  3. leetcode[0142]环形链表II,判断是否存在环形链表并找到环形的入口
  4. indesign教程,如何创建和编辑图形元素的框架?
  5. InDesign 软件教程,如何新建文档?
  6. 支持MacOS 12.x的虚拟机VMware Fusion Pro for Mac
  7. 使用Name Mangler快速为批量文件重命名
  8. CentOS 6.5 x64安装svn
  9. PopTip View
  10. android 文件加密源码