博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
阅读量:7038 次
发布时间:2019-06-28

本文共 3313 字,大约阅读时间需要 11 分钟。

一、前言

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

本篇代码以下代码进行调整:

3、准备工作

VS Code 本身不提供 ASP.NET Core MVC 视图引擎(Razor)的智能感知。

幸运的是, 从 1.17.0 版本开始支持Razor视图引擎的智能感知。

所以,我们要将升级到最新版本。

另外,要特意说明的是,在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";}

@ViewBag.Title

PartialView Demo by ken.io

@Html.Partial("_DateTimeInfo")

@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;

@Model.Title

@Model.PublishTime.ToString("yyyy-MM-dd")

@Model.Body

实际上就是创建强类型分部视图:-D

3、创建视图并引用分部视图

/Views/Partial 目录下创建文件 DemoWithParams.cshtml

@using Ken.Tutorial.Web.Models;@{    ViewBag.Title = "PartialView With Params Demo";}

@ViewBag.Title

PartialView With Params Demo by ken.io

@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、附录

  • 本文代码示例

  • 本文参考


本文首发于我的独立博客:

转载地址:http://mrnal.baihongyu.com/

你可能感兴趣的文章
Bootstrap常用样式的代码
查看>>
思科 典型QoS配置案例
查看>>
电路交换、报文交换、数据交换的区别
查看>>
plsql连接oracle方法
查看>>
戴尔聚合网络适配器(Converged Network Adapter, CNA) 在RHEL 6 SP1环境下可开箱即用
查看>>
GREP(1)
查看>>
查看wtmp文件内容
查看>>
设备序列号
查看>>
Linux文本处理三剑客之grep详解
查看>>
6月23日全球域名商(国际域名)解析量排行榜TOP20
查看>>
阿里巴巴Java开发 之 安全规约
查看>>
枚举在业务系统中的最佳使用方式
查看>>
css布局float浮动布局详解,工作半年后才知道的知识
查看>>
ECS开放批量创建实例接口RunInstances
查看>>
PyODPS 安装常见问题解决
查看>>
单网卡实现虚拟交换机trunk功能
查看>>
nginx日志定时切割
查看>>
Zabbix之自动发现
查看>>
DOS功能调用——单个字符及字符串的输入输出
查看>>
UITextField基础属性
查看>>