ASP.NET Core MVC 之局部视图(Partial Views)
1.什么是局部视图
局部视图是在其他视图中呈现的视图。通过执行局部视图生成的HTML输出呈现在调用视图中。与视图一样,局部视图使用 .cshtml 文件扩展名。当希望在不同视图之间共享网页的可重用部分时,就可以使用局部视图。
2.什么时候使用局部视图
局部视图是将大视图分成小组件的有效方法。通用的布局元素应在 _Layout.cshtml 中指定,非布局可重用内容可以封装成局部视图。
如果一个由几个逻辑部分组成的复杂页面,那么将每个逻辑部分作为局部视图是很有用。布局视图与普通视图之间没有语义差别,它们只是以不同的方式呈现。你可以直接从控制器的 ViewResult 返回视图,而这个视图也可以当局部视图来用。视图和局部视图的主要区别是呈现方式不同,局部视图不运行 _ViewStart.cshtml,而视图运行。
3.引用局部视图
在视图页面中有几种方法呈现局部视图。最简单的是使用 Html.Partial ,它通过 @ 前缀来调用并返回 IHtmlString : @Html.Partial("AuthorPartial")。
PartialAsync 方法对包含异步代码的局部视图是可用的: @await Html.PartialAsync("AuthorPartial") 。
还可以使用 RenderPartial 方法来呈现局部视图。这个方法不返回结果:它将渲染结果直接输出到响应中。正因为它不返回响应,所以必须在 Razor 代码块中调用。通用也有一个异步方法 RenderPartialAsync:
@{
Html.RenderPartial("AuthorPartial");
}
4.发现局部视图
当引用局部视图时,可以通过多种方式找到它的位置:
//以视图名使用当前文件夹下的视图,如果没有找到,则搜索Shared 文件夹
@Html.Partial("ViewName") //这个名称的视图必须在相同文件夹下
@Html.Partial("ViewName.cshtml") //依据应用根路径定位视图,以“/” 或 “~/” 开头的路径表示应用根路径
@Html.Partial("~/Views/Folder/ViewName.cshtml") //使用相对路径
@Html.Partial("../Account/ViewName.cshtml")
局部视图可以链接。也就是说,一个局部视图可以调用另一个局部视图(只要不创建循环)。
5.局部视图访问数据
当局部视图被实例化时,它获取父视图的 ViewData 字典的副本。对局部视图中的数据所做的更新不会影响到父视图。局部视图返回时,局部视图中更改的 ViewData 将丢失。
你可以将 ViewDataDictionary 的实例传递到局部视图: @Html.Partial("PartialName",customViewData) 。
也可以将模型传递到局部视图:@Html.Partial("PartialName",viewModel) 。
也可以将ViewDataDictionary 和 模型都传递到视图:@Html.Partial("PartialName",viewModel,customViewData) 。
6.简单实战
先创建用到的模型:
namespace MVCTest.Models
{
public class Article
{
public Article()
{
Sections = new List<ArticleSection>();
}
public string AuthorName { get; set; }
public List<ArticleSection> Sections { get; set; }
}
public class ArticleSection
{
public string Title { get; set; }
public string Content { get; set; }
}
}
然后在控制器中实例化模型:
public class ArticleController : Controller
{
// GET: Article
public ActionResult Index()
{
var article = new Article();
article.AuthorName = "test";
article.Sections.Add(new ArticleSection() { Title="title",Content="content"});
return View(article);
} }
父视图:
@model MVCTest.Models.Article
@{
ViewData["Title"] = "Index";
}
<h2>@Model.AuthorName</h2>
@Html.Partial("AuthorPartial",Model.AuthorName);
@foreach (var section in @Model.Sections)
{
@Html.Partial("ArticleSection", section);
}
AuthorPartial.cshtml:
@model string <h3>@Model</h3>
ArticleSection.cshtml:
@model MVCTest.Models.ArticleSection <h3>@Model.Title</h3>
<h2>@Model.Content</h2>
ASP.NET Core MVC 之局部视图(Partial Views)的更多相关文章
- ASP.NET Core MVC 之视图(Views)
ASP.NET Core MVC 控制器可以使用视图返回格式化的结果. 1.什么是视图 在 MVC 中,视图封装了用户与应用交互呈现细节.视图是具有生成要发送到客户端内容的,包含嵌入代码的HTML模板 ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 12. Views 下
ASP.NET Core MVC 13. 安装前端库 Partial VIew 就是部分View,他没有自己的数据,数据来自图中白色的那块,它的数据需要传进去,第一个参数是View的名称,第二个参数就 ...
- ASP.NET Core MVC 视图
ASP.NET Core MVC中视图的知识和ASP.NET MVC有很多相似之处,学习难度较低.以下内容主要体现了编程中模块化的思想,模块化才应是我们关注的重点. Layout 布局用于提供各个页面 ...
- ASP.NET Core MVC 之布局(Layout)
1.什么是布局 布局通常包含常见的用户界面元素,例如应用头,导航或菜单元素和页脚,如图: 常见的HTML结构(例如脚本和样式表)也经常被应用程序中许多页面使用.所有这些共享元素都可以在布局中定义,然后 ...
- Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程
原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...
- 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 Core MVC入门教程记录
观看杨老师(杨旭)Asp.Net Core MVC入门教程记录 ASP.NET Core MVC入门 Asp.Net Core启动和配置 Program类,Main方法 Startup类 依赖注入,I ...
- ASP.NET Core MVC 之视图组件(View Component)
1.视图组件介绍 视图组件是 ASP.NET Core MVC 的新特性,类似于局部视图,但它更强大.视图组件不使用模型绑定,并且仅依赖于调用它时所提供的数据. 视图组件特点: 呈块状,而不是整个响应 ...
随机推荐
- 【设计模式】结构型03外观模式(Facade Pattern)
[设计模式]结构型02装饰模式(Decorator Pattern) 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决:降低访问 ...
- Programming In Lua 第一章
1,Lua可以嵌入其他应用程序(如CGILua或IUPLua). 2,lua代码的语句,分号是可以省略的.同一行可以有多条lua语句,最好用分号隔开(当然也可以不隔开) 3,外壳与lua解释器的区别. ...
- JavaScript 基础知识 变量与数据类型
一.区分大小写 JS中一切(变量/函数名/操作符)都是严格区分大小写的 二.标识符 变量.函数.属性的名字以及函数的参数 命名规则:1.第一个字符可以是字母.下划线.美元符号$ 2.其他的字符可以是字 ...
- HDU 1724:Ellipse(自适应辛普森积分)
题目链接 题意 给出一个椭圆,问一个[l, r] 区间(蓝色区域)的面积是多少. 思路 自适应辛普森积分 具体一些分析如上. 很方便,套上公式就可以用了. 注意 eps 的取值影响了跑的时间,因为决定 ...
- centos下安装色彩scrapy
一.安装Python2.7.6 更新CentOS lib库文件 yum -y update 安装开发工具包 yum groupinstall -y development 安装扩展包 yum inst ...
- 项目心得——mybatisplus注解
最近在做的项目中使用了mybatisplus,遇到了一些小问题,特此记录. 1.在sql查询后返回的数据中,会存在一些实体类中本没有的字段: 遇到这个问题时,我理所当然的就去实体类中添加了这个字段,但 ...
- python接口自动化(二十八)--html测试 报告——下(详解)
简介 五一小长假已经结束了,想必大家都吃饱喝足玩好了,那就继续学习吧.一天不学习,自己知道:两天不学习,对手知道:三天不学习,大家知道:一周不学习,智商输给猪.好了开个玩笑都逗大家一乐,但是想想还是有 ...
- 齐治运维堡垒机后台存在命令执行漏洞(CNVD-2019-17294)分析
基本信息 引用:https://www.cnvd.org.cn/flaw/show/CNVD-2019-17294 补丁信息:该漏洞的修复补丁已于2019年6月25日发布.如果客户尚未修复该补丁,可联 ...
- 在阿里云上搭建Spring Initializr服务器。
参考的博客有: https://blog.csdn.net/chszs/article/details/51713174 https://segmentfault.com/a/119000001137 ...
- C++ 编程技巧锦集(一)
C++刷题精髓在STL编程,还有一些函数.下面我就总结一下本人在刷题过程中,每逢遇见总要百度的内容………………(大概率因为本人刷题太少了) 1. map map<string, int> ...