ASP.NET Core MVC基础学习之局部视图(Partial Views) |
1.什么是局部视图 局部视图是在其他视图中呈现的视图 。通过执行局部视图生成的HTML输出呈现在调用视图中 。与视图一样,局部视图使用 .cshtml 文件扩展名 。当希望在不同视图之间共享网页的可重用部分时,就可以使用局部视图 。 2.什么时候使用局部视图 局部视图是将大视图分成小组件的有效方法 。通用的布局元素应在 _Layout.cshtml 中指定,非布局可重用内容可以封装成局部视图 。 如果一个由几个逻辑部分组成的复杂页面,那么将每个逻辑部分作为局部视图是很有用 。布局视图与普通视图之间没有语义差别,它们只是以不同的方式呈现 。你可以直接从控制器的 ViewResult 返回视图,而这个视图也可以当局部视图来用 。视图和局部视图的主要区别是呈现方式不同,局部视图不运行 _ViewStart.cshtml,而视图运行 。 3.引用局部视图 在视图页面中有几种方法呈现局部视图 。最简单的是使用 Html.Partial ,它通过 @ 前缀来调用并返回 PartialAsync 方法对包含异步代码的局部视图是可用的: 还可以使用 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 的实例传递到局部视图: 也可以将模型传递到局部视图: 也可以将ViewDataDictionary 和 模型都传递到视图: 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> 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持 。 |