站点图标 江湖人士

ASP.NET Core – Razor布局视图

ASP.NET Core - Razor布局视图

在这篇文章中,老司机带你了解Razor布局视图。大多数网站和Web应用程序都希望创建呈现一些常见元素的页面。

布局视图

现在让我们了解布局视图是什么。

我们举一个简单的例子。

如果您有多个视图,那么您将看到所有视图都包含一些重复标记。它们都有一个开头的HTML标签头标签正文标签

尽管我们在此应用程序中没有导航菜单,但实际应用程序可能也可用,我们不希望在每个视图中复制该标记。

让我们创建一个Layout视图,我们将Layout视图添加到Views文件夹中名为Shared的新文件夹中。这是MVC框架知道的传统文件夹。它知道这里的视图可能被整个应用程序中的多个控制器使用。让我们右键单击Shared文件夹,然后选择Add→New Item。

在中间窗格中,选择MVC视图布局页面。这里的默认名称是_Layout.cshtml。选择要在运行时使用的布局视图,具体取决于用户。现在,单击“添加”按钮。这是默认情况下您的新布局视图。

我们希望布局视图负责管理头部和身体。现在,由于此视图位于Razor视图中,因此我们可以使用C#表达式。我们仍然可以添加文字文本。我们现在有一个显示DateTime.Now的div。现在让我们添加年份。

<!DOCTYPE html> 
<html> 
   
   <head> 
      <meta name = "viewport" content = "width = device-width" /> 
      <title>@ViewBag.Title</title> 
   </head> 

   <body> 
      <div> 
        @DateTime.Now 
      </div> 
      
      <div> 
        @RenderBody() 
      </div> 
      
   </body> 
</html>

在上面的代码,你会看到这样的表达式RenderBodyViewBag.Title。当MVC控制器操作呈现索引视图时,它包含一个布局页面; 然后,索引视图及其生成的HTML将放置在“索引”视图中。

这是方法调用RenderBody的位置。我们可以期望整个应用程序中的所有内容视图都出现在调用RenderBody的div中。

此文件中的另一个表达式是ViewBag.Title。ViewBag是一种数据结构,可以添加到任何属性以及要进入ViewBag的任何数据。我们可以在ViewBag上添加ViewBag.Title,ViewBag.CurrentDate或我们想要的任何属性。

现在让我们转到index.cshtml文件。

@model FirstAppDemo.Controllers.HomePageViewModel 
<html xmlns = "http://www.w3.org/1999/xhtml"> 
   
   <head> 
      <title>Home</title> 
   </head> 

   <body> 
      <h1>Welcome!</h1> 
      
      <table> 
         @foreach (var employee in Model.Employees) { 
            <tr> 
               <td> 
                  @Html.ActionLink(employee.Id.ToString(), "Details", new 
                     { id = employee.Id }) 
               </td> 
               <td>@employee.Name</td> 
            </tr> 
         } 
      </table> 
      
   </body> 
</html>

删除索引视图中不再需要的标记。因此,我们可以删除HTML标记和head标记之类的内容。我们也不需要打开的body元素或关闭标记,如下面的程序所示。

@model FirstAppDemo.Controllers.HomePageViewModel  
@{  
   ViewBag.Title = "Home"; 
   Layout = "~/Views/Shared/_Layout.cshtml"; 
}
<h1>Welcome!</h1> 
<table> 
   @foreach (var employee in Model.Employees) { 
      <tr> 
         <td> 
            @Html.ActionLink(employee.Id.ToString(), "Details", new { id = employee.Id })
         </td> 
         <td>@employee.Name</td> 
      </tr> 
   } 
</table>

我们仍然需要做两件事 –

让我们保存所有文件并运行应用程序。运行应用程序后,您将看到以下主页。

退出移动版