Asp.Net Core MVC 部分视图与视图组件
用部分视图来显示当前日期
部分视图与普通视图没太大区别,它可以将重复使用的HTML内容结合起来,可以单独使用。一般命名是在名称前面加下划线,放在/Views/Shared 目录下。
- 下面使用部分视图来显示日期。
Test控制器
[Route("[controller]/[action]")] public class TestController : Controller { public IActionResult Default() { return View(); } }
Shared目录下添加_showDate.cshtml。
<div style="padding:25px 20px;border:2px solid yellow;background-color:lightgoldenrodyellow"> @DateTime.Today.ToString("yyyy'年'M'月'd'日',dddd") </div>
在Test目录下添加Default.cshtml。引用部分视图可调用PartialAsync
方法,并指定名称。也可先使用@addTagHelper
指令导入标记帮助器类型,再使用标记帮助器<partial>
元素来指定引用部分视图。
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers <html> <body> <div> <h4>示例程序</h4> </div> <div> @await Html.PartialAsync("_showDate") <partial name="_showDate"/> </div> </body> </html>
使用视图组件
视图组件(View Component)与部分视图在功能上比较相似,但视图组件更灵活。与控制器相似,视图组件可以实现视图也代码分离,并且一个视图组件可以返回多个视图。
视图组件有两种实现方法:
(1)直接从ViewComponent
类派生,并包括Invoke或InvokeAsync方法。
(2)自定义类,需要在类上应用ViewComponent特性
,并包括Invoke或InvokeAsync方法。
Invoke
或InvokeAsync
方法是约定方法,允许定义方法参数,返回值类型需要实现IViewComponentResult
接口。框架默认实现了ViewViewComponentResul
与ContentViewComponentResult
。
对于Razor文档,在需要呈现视图组件的地方调用Component.InvokeAsync
方法。
视图组件会在以下路径查找视图:
(1)共享组件:默认位于 /Views/Shared/Components/<视图组件名称>/<视图>.cshtml。共享视图组件可以在应用项目范围内访问。
(2)非共享组件:默认位于 /Views/<控制器名称>/Components/<视图组件名称>/<视图>.cshtml。非共享视图组件只可在当前控制器中访问。
- 例
定义视图组件类Test。视图组件名可带“ViewComponent”后缀,必须包含Invoke方法。
public class TestViewComponent : ViewComponent { IHostingEnvironment m_env = null; public TestViewComponent(IHostingEnvironment env) { m_env = env; } public IViewComponentResult Invoke() { return View("_showInfo", m_env); } }
定义Demo控制器。
public class DemoController : Controller { public ActionResult Start() { return View(); } }
在Shared目录下新建Components目录,Components下新建Test视图组件同名目录,添加_showInfo.cshtml。
@model Microsoft.AspNetCore.Hosting.IHostingEnvironment <div style="color:red;font-size:18px"> <p> 应用程序名称:@Model.ApplicationName </p> <p> 当前运行环境:@Model.EnvironmentName </p> </div>
Views下建Demo目录,添加Start.cshtml。
<html> <body> <div> <h1>应用主页</h1> </div> <hr/> <div> <h3>以下为视图组件:</h3> <h3>以下为视图组件:</h3> @*第一种方法*@ @await Component.InvokeAsync("Test") @*第二种方法*@ @await Component.InvokeAsync(typeof(Demo.TestViewComponent)) @*以下代码不可取 @{ await Component.InvokeAsync("Test"); }*@ </div> </body> </html>
本文来自博客园,作者:一纸年华,转载请注明原文链接:https://www.cnblogs.com/nullcodeworld/p/18210631
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)