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>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。
相关文章
AspNetAjaxPager,Asp.Net通用无刷新Ajax分页控件,支持多样式多数据绑定
最近闲来没事,总结了一些asp.net分页经验,为使用方便现在写了一个可以通用的分页控件:AspNetAjaxPager:,使用ajax技术实现无刷新分页,能够控制所有数据绑定控件的分页,自己觉得效果还是挺不错的,现在奉献给大家!2009-04-04
Repeater控件动态变更列(Header,Item和Foot)信息(重构cs)
上一篇虽然它算不上是完全动态化,但它已经达到初期想要的效果,现另开一篇,不是重新另外写,而是想重构cs的代码,因为前一篇的代码虽然简单,但代码冗余过多,感兴趣的朋友可以参考下哈2013-03-03
删除DataTable重复列,只删除其中的一列重复行的解决方法
删除DataTable重复列,只删除其中的一列重复行,下面的方法就可以,也许有更好的方法,希望大家多多指教2013-02-02
强烈推荐一个基于.Net Framework开发的Windows右键菜单管理工具
这篇文章主要介绍了推荐一个基于.Net Framework开发的Windows右键菜单管理工具,今天给大家推荐一个Windows右键菜单管理工具,方便我们管理我们的右键菜单,需要的朋友可以参考下2023-05-05
asp.net下模态对话框关闭之后继续执行服务器端代码的问题
asp.net下模态对话框关闭之后继续执行服务器端代码的问题...2007-04-04
asp.net Google的translate工具翻译 API
很久前的一天,我想使用这个东西,然后看了下,GooGle的Translate工具目前没有公开API,还是一个逐渐完善的过程,另一方面,利用一段很小的程序就可以得到我们想要的效果。2008-12-12


最新评论