.NET Core 中的局部视图和视图组件(1)

在 MVC(模型-视图-控制器)模式中,视图是最重要的层之一,因为它用于表示应用程序的数据,包括用户交互。 视图实际上是一个 HTML 模板,其中嵌入了 Razor 标记语法。 在 ASP.NET Core 中,视图的文件扩展名类型为 .cshtml,主要使用 C# 编程语言。

通常情况下,视图文件会根据控制器的名称,按文件夹名称分组。 这些文件夹通常存储在 views 文件夹中。 通常,视图可以分为以下三个不同的部分:

  • 布局(Layouts)—— 布局实际上用于保持网页一致性,并且也可以使用它来减少重复代码。 通常,布局主要包含页眉,导航,菜单元素或页脚部分。
  • 部分视图(Partial Views)—— 部分视图主要通过维护视图的可重用部分来减少代码重复。
  • 视图组件(View Components)—— 就可重用性和减少代码重复而言,它与部分视图非常相似。

实际上,视图可以帮助我们在MVC应用程序中建立 SOC 设计(关注点分离)。 它基本上将用户界面与应用程序的其他部分分开。 通过这种方式,我们将应用程序模块化,从而为我们带来了很多好处:

  1. 由于现在可以更好地组织应用程序,因此可以轻松维护该应用程序。 因为,视图通常按应用程序功能分组。
  2. 该应用程序变得完全松散耦合。 我们可以与业务逻辑和数据访问部分分开构建或更新应用程序视图。
  3. 由于它是一个单独的单元,因此在用户界面上执行测试非常容易。

部分视图(PARTIAL VIEWS)

部分视图基本上只是一个视图,可以在 Web 应用程序中重用。 因此,部分视图可以充当可插拔的可重用块,我们可以从应用程序中的任何位置调用它,并显示部分视图的内容。 每当我们使用部分视图时,它都必须将其呈现为子视图。 作为可重用的组件,或者在将大型接口拆分为小部件的情况下,它非常有用。 我们可以像常规视图一样创建部分视图,并且可以使用ViewResult 从控制器返回此视图。 主要区别在于,部分视图不会在渲染之前运行 _ViewStart.cshtml ,并且在另一个视图中呈现部分视图。

部分视图通常使用 @Html.Partial() 方法在主视图中呈现。  部分视图可以传递部分视图的名称,还可以传递基本上是可选的模型数据。  部分视图始终删除重复项,因为我们可以在应用程序的多个位置使用相同的部分视图。 我们还可以通过使用部分视图来设计布局视图,类似于使用内容视图。 在正常情况下,视图引擎总是在当前文件夹或共享文件夹中搜索部分视图。  部分视图可以访问父视图 ViewData 字典,因为它可以获得视图数据的副本。

渲染部分视图

部分视图可以通过几种方式包含在应用程序的父页面中。 以下命令用于从父界面调用部分视图:

@Html.Partial("_navigationbar")

@Html.Partial() 帮助器方法始终在应用程序中呈现部分视图。 此方法始终将一个参数用作字符串,在该方法中,通常将部分视图名称指定为字符串,并且将视图内容作为 MvcHtmlString 类型值返回。 它始终以 Html 的形式返回视图的内容,这为我们提供了在呈现之前更改或修改 HTML 部件的功能。 @Html 帮助器对象还具有3个其他方法,分别是 PartialAsync,RenderPartial 和 RenderPartialAsync,它们主要用于呈现部分 UI 的内容。 包含 Async 的方法名称将为异步代码呈现。 Render 方法的结果需要直接写到响应中。

如果要创建局部视图,则需要右键单击视图文件夹>单击文件夹>选择添加>单击视图。

现在,熟悉 Angular 1.x 的人们可能会陷入两难的境地,即组件和指令之间的实际区别是什么? 两者之间的主要区别在于,伪指令实际上是向现有 DOM元素添加行为,而组件会创建自己的具有附加行为的视图。

现在,我们需要按照下面的要求对部分视图的一部分进行 html 处理:

<div class="navbar navbar-inverse navbar-fixed-top"> 
 <div class="container"< 
 <div class="navbar-header"> 
   <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
   <span class="icon-bar"></span> 
   <span class="icon-bar"></span> 
   <span class="icon-bar"></span> 
   </button> 
   @Html.ActionLink("Sample Project", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) 
  </div> 
  <div class="navbar-collapse collapse"> 
   <ul class="nav navbar-nav"> 
   <li>@Html.ActionLink("Home", "Index", "Home")</li> 
   <li>@Html.ActionLink("About Us", "About", "Home")</li> 
   <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
   </ul> 
  </div> 
</div> 
</div>

然后,我们可以将"部分"视图调用到主视图中。

<!DOCTYPE html> 
 <html> 
 <head> 
  <meta charset="utf-8" /> 
  <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
  <title>@ViewBag.Title – ASP.NET Core Application</title> 
  @Styles.Render("~/Content/css")  
  @Scripts.Render("~/bundles/modernizr") 
 </head> 
 <body> 
  @{ 
  Html.RenderPartial("_HeaderNavBar");  
  } 
  <div class="container body-content"> 
   @RenderBody()    
   <hr /> 
  <footer> 
   <p>© @DateTime.Now.Year – ASP.NET Core Application</p> 
  </footer> 
  </div> 
  @Scripts.Render("~/bundles/jquery") 
  @Scripts.Render("~/bundles/bootstrap") 
  @RenderSection("scripts", required: false) 
 </body> 
</html>

(未完待续,如有兴趣,可继续查看下篇文章)

《.NET Core 中的局部视图和视图组件(1)》的相关评论

发表评论

必填项已用 * 标记,邮箱地址不会被公开。