服务器之家

服务器之家 > 正文

ASP.NET Core MVC基础学习之局部视图(Partial Views)

时间:2020-06-17 15:28     来源/作者:卡西莫多_Ruby

1.什么是局部视图

  局部视图是在其他视图中呈现的视图。通过执行局部视图生成的HTML输出呈现在调用视图中。与视图一样,局部视图使用 .cshtml 文件扩展名。当希望在不同视图之间共享网页的可重用部分时,就可以使用局部视图。

2.什么时候使用局部视图

  局部视图是将大视图分成小组件的有效方法。通用的布局元素应在 _Layout.cshtml 中指定,非布局可重用内容可以封装成局部视图。

  如果一个由几个逻辑部分组成的复杂页面,那么将每个逻辑部分作为局部视图是很有用。布局视图与普通视图之间没有语义差别,它们只是以不同的方式呈现。你可以直接从控制器的 ViewResult 返回视图,而这个视图也可以当局部视图来用。视图和局部视图的主要区别是呈现方式不同,局部视图不运行 _ViewStart.cshtml,而视图运行。

3.引用局部视图

  在视图页面中有几种方法呈现局部视图。最简单的是使用 Html.Partial ,它通过 @ 前缀来调用并返回 IHtmlString : @Html.Partial("AuthorPartial")

  PartialAsync 方法对包含异步代码的局部视图是可用的: @await Html.PartialAsync("AuthorPartial") 

  还可以使用 RenderPartial 方法来呈现局部视图。这个方法不返回结果:它将渲染结果直接输出到响应中。正因为它不返回响应,所以必须在 Razor 代码块中调用。通用也有一个异步方法 RenderPartialAsync:

?
1
2
3
@{
 Html.RenderPartial("AuthorPartial");
}

4.发现局部视图

  当引用局部视图时,可以通过多种方式找到它的位置:

?
1
2
3
4
5
6
7
8
9
10
11
//以视图名使用当前文件夹下的视图,如果没有找到,则搜索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.简单实战

  先创建用到的模型:

  1. namespace MVCTest.Models 
  2.  public class Article 
  3.  { 
  4.  
  5.       public Article() 
  6.         { 
  7.            Sections = new List<ArticleSection>(); 
  8.         } 
  9. public string AuthorName { get; set; } 
  10.   public List<ArticleSection> Sections { get; set; } 
  11.  } 
  12.  
  13.  public class ArticleSection 
  14.  { 
  15.   public string Title { get; set; } 
  16.   public string Content { get; set; } 
  17.  } 
 

  然后在控制器中实例化模型:

  1. public class ArticleController : Controller 
  2.  { 
  3.   // GET: Article 
  4.   public ActionResult Index() 
  5.   { 
  6.    var article = new Article(); 
  7.    article.AuthorName = "test"
  8.    article.Sections.Add(new ArticleSection() { Title="title",Content="content"}); 
  9.    return View(article); 
  10.   } 
  11.  
  12.  } 
 

  父视图:

  1. @model MVCTest.Models.Article 
  2.  
  3. @{ 
  4.  ViewData["Title"] = "Index"
  5.  
  6. <h2>@Model.AuthorName</h2> 
  7. @Html.Partial("AuthorPartial",Model.AuthorName); 
  8.  
  9. @foreach (var section in @Model.Sections) 
  10.  @Html.Partial("ArticleSection", section); 
 

  AuthorPartial.cshtml:

?
1
2
3
@model string
 
<h3>@Model</h3>

  ArticleSection.cshtml:

?
1
2
3
4
@model MVCTest.Models.ArticleSection
 
<h3>@Model.Title</h3>
<h2>@Model.Content</h2>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。

原文链接:https://www.cnblogs.com/afei-24/p/11293991.html

相关文章

热门资讯

歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
返回顶部