局部视图(partial)
局部视图(partial)
原文:Partial Views
作者:Steve Smith
翻译:张海龙(jiechen)、刘怡(AlexLEWIS)
校对:许登洋(Seay)、何镇汐、魏美娟(初见)
ASP.NET Core MVC 支持局部视图,当你需要在多个不同视图间重用同一个页面部件时会显得特别有用。
什么是局部视图?
局部视图是在其它视图中被渲染的视图。局部视图执行后生成的 HTML 结果会被渲染到调用方视图或父视图中。跟视图文件一样,局部视图文件也使用 .cshtml 作为文件扩展名。
注解
如果你有 ASP.NET Web Forms 的开发背景,那么局部视图就比较类似于你以前用过的 用户控件
何时使用局部视图?
局部视图是将大视图分解为小组件的有效方式。它可以减少视图内容的重复并允许视图元素复用。通用的布局元素应该写在 _Layout.cshtml 中。非布局(non-layout)的重用内容则可封装到局部视图之中。
如果你有一个由多个逻辑块构成的复杂页面,那么将每个逻辑块都作为局部视图是很有用的。页面的每一个部分都可视为独立于其他部分,而页面本身也会变得简单很多,因为它只包含页面的整体结构并调用渲染各局部视图。
小技巧
在你的视图中遵从 不要使自己重复原则 。
定义局部视图
创建局部视图与创建其它视图类似:你在 Views 文件夹中添加一个 .cshtml 文件。局部视图与普通视图之间没有语义级的区别,它们只是渲染上有所不同。你可以直接从控制器的 ViewResult 返回一个视图,而这个视图也可当做局部视图来用。两类视图的主要区别在于渲染上的不同:局部视图不会运行 _ViewStart.cshtml (普通视图则会运行。了解更多 _ViewStart.cshtml 的信息请访问 布局视图)。
引用局部视图
有多种方法在视图中渲染局部视图。最简单的办法是使用 Html.Partial
,它通过 @
前缀来调用并返回 IHtmlContent
:
@Html.Partial("AuthorPartial")
PartialAsync 方法对包含异步代码(尽管通常在视图中不推荐这么做)的局部视图是可用的。
@await Html.PartialAsync("AuthorPartial")
可以使用 RenderPartial 渲染局部视图。这个方法不返回结果;它将渲染结果直接输出到响应中。正因为它不返回结果,所以必须在 Razor 代码块中调用(当然如果有必要,你也可以调用 RenderPartialAsync
方法):
@{
Html.RenderPartial("AuthorPartial");
}
因为会直接输出结果, RenderPartial
和 RenderPartialAsync
方法可能在一些场景下表现更佳。但是,在大多数情况下推荐你使用 Partial
和 PartialAsync
这两个方法。
注解
如果你的视图需要执行代码,推荐你使用 视图组件 来替代局部视图。
发现局部视图
当引用局部视图的时候,你可以通过多种方式找到它的位置:
// 以视图名使用当前文件夹下的视图
// 如果没有找到,则搜索 Shared 文件夹
@Html.Partial("ViewName")
// 这个名称的视图必须在相同文件夹下
@Html.Partial("ViewName.cshtml")
// 依据应用根路径定位视图
// 以 "/" 或 "~/" 开头的路径代表应用根路径
@Html.Partial("~/Views/Folder/ViewName.cshtml")
@Html.Partial("/Views/Folder/ViewName.cshtml")
// 使用相对路径定位视图
@Html.Partial("../Account/LoginPartial.cshtml")
若需要,你可以在不同的视图文件夹下存放同名的不同局部视图。当根据视图名称(不包括文件扩展名)来引用视图时,视图将使用其所在的文件夹下的局部视图。当然你也可以指定并使用默认位于 Shared 文件夹下的局部视图,这个视图可被任意视图(前提是在它们的文件夹下不存在这个局部视图)使用。换句话说,你可以在 Shared 文件夹下放置默认的局部视图,该默认局部视图会被当前执行视图所在文件夹下的同名局部视图所覆盖。
局部视图可以被连续地链式使用 。这个意思是说一个局部视图可以调用另一个局部视图(只要你不要创建循环)。在每个视图或局部视图中,相对路径总是相对于所在视图,而非根路径或父视图。
注解
如果你在局部视图中定义 Razorsection
,将对其父级不可见;将被限定在局部视图。
从局部视图访问数据
当局部视图被实例化,它获得父视图的 ViewData
字典的副本。在局部视图中对该字典副本进行的修改不会影响到父视图中的字典。 当局部视图返回时,将丢弃局部视图中的 ViewData
副本。
你可以传递 ViewDataDictionary
的实例到局部视图:
@Html.Partial("PartialName", customViewData)
你也可以传递模型到局部视图。该模型可以是页面的视图模型(view model),也可以是视图模型的一部分,亦或者是其他自定义对象。只需要在调用 Partial
/PartialAsync
或 RenderPartial
/RenderPartialAsync
时简单地把模型作为第二个参数传入。
@Html.Partial("PartialName", viewModel)
你可以传递一个 ViewDataDictionary
的实例和视图模型到局部视图:
@Html.Partial("PartialName", viewModel, customViewData)
示例
下例中,视图指定了 Article
类型的视图模型。 Article
有一个 AuthorName
属性,它被传递到一个叫做 AuthorPartial 的局部视图中;同时还有一个 List<ArticleSection>
类型的属性,它被传递到一个专用于渲染此类型的局部视图:
@using PartialViewsSample.ViewModels
@model Article
<h2>@Model.Title</h2>
@Html.Partial("AuthorPartial", Model.AuthorName)
@Model.PublicationDate
@foreach (var section in @Model.Sections)
{
@Html.Partial("ArticleSection", section)
}
AuthorPartial (此例中在 /Views/Shared 文件夹):
@model string
<div>
<h3>@Model</h3>
This partial view came from /Views/Shared/AuthorPartial.cshtml.<br/>
</div>
ArticleSection 部分:
@using PartialViewsSample.ViewModels
@model ArticleSection
<h3>@Model.Title</h3>
<div>
@Model.Content
</div>
在运行时,这些局部视图将被渲染到父视图,父视图自身在共享的 _Layout.cshtml 中被渲染,输出结果如下:
dotNet Core Studying Group:436035237
局部视图(partial)的更多相关文章
- Ruby Rails学习中:网站导航,Bootstrap和自定义的CSS,局部视图
添加一些结构 一.网站导航 1.添加一些结构后的网站布局文件 打开文件:app/views/layouts/application.html.erb 简单介绍一下,添加的代码: 我们从上往下看一下这段 ...
- NET Core-学习笔记(四)
经过前面分享的三篇netcore心得再加上本篇分享的知识,netcore大部分常用知识应该差不多了,接下来将不会按照章节整合一起分享,因为涉及到的东西整合到一起篇幅太大了,所以后面分享将会按照某一个知 ...
- 第十章 设计用户界面 之 构建UI布局
1. 概述 本章内容包括:实现可在不同区域重用的片段.使用Razor模板设计和实现页面.设计可视结构的布局.基于模板页开发. 2. 主要内容 2.1 实现可在不同区域重用的片段 最简单的重用方式就是在 ...
- ASP.NET Core 中文文档 第四章 MVC(3.7 )局部视图(partial)
原文:Partial Views 作者:Steve Smith 翻译:张海龙(jiechen).刘怡(AlexLEWIS) 校对:许登洋(Seay).何镇汐.魏美娟(初见) ASP.NET Core ...
- ASP.NET Core MVC 之局部视图(Partial Views)
1.什么是局部视图 局部视图是在其他视图中呈现的视图.通过执行局部视图生成的HTML输出呈现在调用视图中.与视图一样,局部视图使用 .cshtml 文件扩展名.当希望在不同视图之间共享网页的可重用部分 ...
- MVC中局部视图的使用
加载部分视图 $("#result").load("/home/message",function(){ //加载完之后隐藏进度条 }); public Act ...
- ruby on rails全局布局,局部视图,局部布局
参考链接:http://guides.ruby-china.org/layouts_and_rendering.html#%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%E6 ...
- 015.NET5_MVC_Razor局部视图
局部视图 1. 可以增加代码的重用性 如何定义? 1.添加一cshtml文件 2. 在页面中调用局部视图:@html.Partial("局部视图的名称") 问题:局部视图中不能访问 ...
- ASP.NET MVC RenderPartial和Partial的区别
背景:ASP.NET MVC 4.0 @{ Html.RenderPartial(...); } public static void RenderPartial(this HtmlHelper ht ...
随机推荐
- springboot +spring security4 自定义手机号码+短信验证码登录
spring security 默认登录方式都是用户名+密码登录,项目中使用手机+ 短信验证码登录, 没办法,只能实现修改: 需要修改的地方: 1 .自定义 AuthenticationProvide ...
- Android(java)学习笔记180:Android MediaPlayer 播放prepareAsync called in state 8解决办法
使用android MediaPlayer播放音频文件时,有时会出现prepareasync called in state 8错误. 以下方法可以避免这个异常出现. 第一种方法: private ...
- plupload使用指南(转)
转自http://www.cnblogs.com/2050/p/3913184.html 现在随着html5技术的逐渐推广和普及,再去使用以flash为上传手段的SWFUpload显然就有点过时了,毕 ...
- JavaScript 应用开发 #2:视图与模板
在用 Backbone 开发的 JavaScript 应用里面,除了模型与集合以外,另一个重要的部分就是视图,英文是 View .在视图里面,我们可以去监听在页面上发生的事件,还有与视图相关的模型和集 ...
- Android 动画及属性动画
Android 平台提供了一套完整的动画框架,在Android3.0之前有两种动画Tween Animation(补间动画)和Frame Animation(帧动画), 对应SDK中的View Ani ...
- 2015前端各大框架比较(angular,vue,react,ant)
前端流行框架大比拼 angular vue react ant-design angularjs angular是个MVVM的框架.针对的是MVVM这整个事.angular的最主要的场景就是单页应用, ...
- 插件使用总结-jquery.pin.js
小伙伴们,俺昨天用了jquery.pin.js这个插件,发现了一些自以为是的使用问题.特此做个总结哈. 1.获取: 下载地址: http://www.bootcss.com/p/jquery.pin ...
- Promise的用简要使用方式
Promise用法 在项目中用到异步请求ajax,想到用promise来解决,之前用过但是已经很久了,还是忘了一些,重新熟悉了一下整理一份简要文档. Promise,就是一个对象,用来传递异步操作的消 ...
- ( 转 )Github配置
以下转自 http://liuzhijun.iteye.com/blog/1457207 有问题请联系我删除. -----———————————————————————— 如果你的代码不知道放哪里好, ...
- javascript 【js‘s word】
http://mp.weixin.qq.com/s?__biz=MjM5MzY2NDY0Ng==&mid=214013689&idx=1&sn=21e03f6c7bf73893 ...