一、局部视图是什么?
1、局部视图也是 .cshtml文件
2、将重复使用的内容(如:右侧栏),做出局部视图,供其他视图调用
3、局部视图不会执行 _ViewStart.cshtml
二、局部视图示例
1、在 /Views/Shared目录右键,添加视图,视图名称:_Right.cshtml
代码如下:
<div style="background-color:red;width:250px;height:200px;">
右侧栏内容
</div>
2、视图中调用 _Right.cshtml局部视图
(1)有返回,返回IHtmlString
将局部视图内容解析好,替换到这个地方
@Html.Partial("~/Views/Shared/_Right.cshtml") @*绝对路径*@
@Html.Partial("_Right") @*局部视图名*@
@await Html.PartialAsync("_Right") @*异步方式加载局部视图*@
(2)无返回
页面执行,是响应流形式,从上往下执行,执行到这里。进入局部视图里解析,输出到响应流里*
@{
Html.RenderPartial("_Right");//c#代码 将局部视图,输出到响应流里
await Html.RenderPartialAsync("_Right"); //异步
}
三、局部视图数据传递
1、ViewData
首页中的ViewData["Title"],可以在局部视图中使用。如下:
<div style="background-color:red;width:250px;height:200px;">
右侧栏内容 @ViewData["Title"]
</div>
<br />
注意:我们在局部视图中,修改了 ViewData["Title"] 的值。那么局部视图 ViewData["Title"] 的值发生了改变,但是在主视图中 ViewData["Title"] 的值,不会发生改变。
2、向局部视图传入字符串
四、视图组件
视图组件是 .NET CORE MVC 新特性
不使用模型绑定,可以执行一些业务逻辑代码。可以通过依赖注入的方式,获取数据库上下文,然后通过它获取数据源。
它其实是一个类,这个类对应一个视图
五、创建视图组件
1、在 core 目录下,添加一个类,类名:NewStudents.cs
public class NewStudents:ViewComponent
{
//构造函数可以通用依赖注入的方式,获取dbcontext
public NewStudents()
{
}
public IViewComponentResult Invoke(int num)
{
var users = new List<UserInfo>();
for (int i=0;i<num;i++)
{
users.Add(new UserInfo() { Id=i,Name=i+"学生名称"});//输出0学生名称 到 9学生名称
}
return View(users);
}
}
2、创建 Views/Shared/components/NewStudents/Default.cshtml
视图搜索:
通常在 Views/控制器名/components/视图组件名称/视图名称
或者 Views/Shared/components/视图组件名称/视图名称
@model List<UserInfo>
<div style="background-color:aqua">
<h3>最新同学</h3>
<ul>
@foreach (var item in Model)
{
<li>@item.Name</li>
}
</ul>
</div>
3、在其他视图中使用
@await Component.InvokeAsync("NewStudents", new { num = 10 })
参数:NewStudents 是视图组件名称