<三>Asp.netcore MVC 视图(View)

在MVC模式中, 视图封装了用户与应用交互呈现细节。 视图是具有生成要发送到客户端内容的、 包含嵌入代码的HTML模板。视图使用Razor语法, 该语法允许以最少的代码量或复杂度与HTML进行交互。ASP.NET Core MVC视图默认以.cshtml文件保存在应用程序的Views文件夹里面。

一、创建视图

属于某个控制器的视图创建在Views/ [ControllerName]文件夹下。在控制器之间共用的视图则放在Niews/Shared文件夹下。 

@{ @符号代表Razor代码。C#语句在大括号({})包裹的Razor代码块中运行,
ViewData ["Title"] = "About"; 
}
<h2>@ViewData ["Title"] </h2> 
<h3>@ViewData["Message"]</h3>
<p>Use this area to provide additional information.</p>

二、数据传输方式

1、在视图中指定 个模型类型(视图模型), 将此类型的实例从操作传递到视图。 建议使用模型或视图模型将数据传递到视图。这允许视图利用强类型检查, 你可以使用@model指令引用该类型

@model WebApplicationl.ViewModels.Address <h2>Contact</h2> 
<address> 
@Model.street<br /> 
@Model. City, @Model. State @Model. PostalCode<br /> <abbr title="Phone">P:</abbr>
</address>
public IActionResultContact(){ 
var viewModel = new Address()
{
    Name = "Microsof七",
    Street = "One Microsoft Way", City = "Redmond", 
    State = "WA", 
    PostalCode = "98052-6399" 
}; 
return View(viewModel);

2、ViewData、ViewBag

该集合的动态视图, 它不是个单独的集合。ViewData 是通过字符串键访问的字典对象, 可以在其中存储和检索对象。 当提取对象时,需要将它们转换为特定类型。可以使用ViewData 将数据从控制器传递到视图

@using ViewModeles.Address;
@{
var address = ViewData["Address") as Address;
}
ViewData ["Greeting"] = "Hello"; 
ViewData ["Address"] = new Address ()

三、布局(Layout)

1、大多数Web应用程序具有通用布局,为用户在页面之间导航提供一致的体验。布局通常包括常见的用户界面元素,例如应用头、导航或菜单元素和页脚,如下图所示。

 

 

 2、ASP.NET应用程序的默认布局名为_Layout.cshtml。项目模板放在在Views/Shared 文件夹中。

Razor视图有一个 Layout属性。单个视图通过设置此属性来指定布局:

@{
   Layout = "_Layout" ;
}

3、局部视图(Partial Views)

ASP.NET Core MVC支持局部视图,当希望在不同视图之间共享网页的可重用部分时,局部视图非常有用。与视图一样,局部视图使用.cshtml 文件扩展名。

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

@Html.Partial( "AuthorPartial");
@await Html.PartialAsync("AuthorPartial")
@Html.Partial("PartialName", viewModel)

4、视图组件(View Component)

视图组件是ASP.NET Core MVC中的新特性,类似于部分视图,但是它更加强大。视图组件不使用模型绑定,并且仅依赖于调用它时所提供的数据。

创建方式

派生自ViewComponent。
使用[ViewComponent]属性装饰类,或从具有[ViewComponent]属性的类派生。创建一个名称后缀为ViewComponent结尾的类。

使用

@Component.InvokeAsync("视图组件名",<匿名类型参数>)。
参数将传递到InvokeAsync方法。
@await Component.InvokeAsync("PriorityList",new { maxPriority = 2,isDone =false }

 

posted @ 2022-05-16 23:26  许轩霖  阅读(293)  评论(0编辑  收藏  举报