ASP.NET Core MVC基础学习之局部视图(Partial Views)
1.什么是局部视图
局部视图是在其他视图中呈现的视图。通过执行局部视图生成的HTML输出呈现在调用视图中。与视图一样,局部视图使用.cshtml文件扩展名。当希望在不同视图之间共享网页的可重用部分时,就可以使用局部视图。
2.什么时候使用局部视图
局部视图是将大视图分成小组件的有效方法。通用的布局元素应在_Layout.cshtml中指定,非布局可重用内容可以封装成局部视图。
如果一个由几个逻辑部分组成的复杂页面,那么将每个逻辑部分作为局部视图是很有用。布局视图与普通视图之间没有语义差别,它们只是以不同的方式呈现。你可以直接从控制器的ViewResult返回视图,而这个视图也可以当局部视图来用。视图和局部视图的主要区别是呈现方式不同,局部视图不运行_ViewStart.cshtml,而视图运行。
3.引用局部视图
在视图页面中有几种方法呈现局部视图。最简单的是使用Html.Partial,它通过@前缀来调用并返回IHtmlString:@Html.Partial("AuthorPartial")。
PartialAsync方法对包含异步代码的局部视图是可用的:@awaitHtml.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.简单实战
先创建用到的模型:
namespaceMVCTest.Models { publicclassArticle { publicArticle() { Sections=newList(); } publicstringAuthorName{get;set;} publicList Sections{get;set;} } publicclassArticleSection { publicstringTitle{get;set;} publicstringContent{get;set;} } }
然后在控制器中实例化模型:
publicclassArticleController:Controller { //GET:Article publicActionResultIndex() { vararticle=newArticle(); article.AuthorName="test"; article.Sections.Add(newArticleSection(){Title="title",Content="content"}); returnView(article); } }
父视图:
@modelMVCTest.Models.Article @{ ViewData["Title"]="Index"; }@Model.AuthorName
@Html.Partial("AuthorPartial",Model.AuthorName); @foreach(varsectionin@Model.Sections) { @Html.Partial("ArticleSection",section); }
AuthorPartial.cshtml:
@modelstring@Model
ArticleSection.cshtml:
@modelMVCTest.Models.ArticleSection@Model.Title
@Model.Content
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。