ASP.NET CORE 自定义视图组件(ViewComponent)注意事项
概要:1.简单ViewComponent的用法
2.ViewComponent控制器返回值
3.注意事项
1.简单ViewComponent的用法
第一步:创建ASP.NET CORE Web应用程序,并在网站根目录创建 ViewComponents 文件夹
第二部:在ViewComponents文件夹中新建视图组件的控制器, 这儿我命名为 OnePartViewComponent 。 然后编辑该类,继承ViewComponent,实现InvokeAsync()或Invoke()方法
1 using Microsoft.AspNetCore.Mvc; 2 3 namespace AspCoreTest.ViewComponents 4 { 5 public class OnePartViewComponent : ViewComponent 6 { 7 //public async Task<IViewComponentResult> InvokeAsync() 8 public IViewComponentResult Invoke() 9 { 10 ViewData["Msg"] = "别看了,我就是分布视图"; 11 12 return View(); 13 } 14 } 15 }
第三步:创建视图
在Views文件夹下新建 Components 文件夹,在该Components文件夹下建 OnePart 文件夹, 接着在该OnePart文件夹下建视图页 Default.cshtml。暂且一行代码
1 <h1>@ViewData["Msg"]</h1>
到此一个简单的视图组件也就创建完了
第四部:在其他页面插入我们创建的这个视图组件,这儿我选择VS自动创建的 About 页面作为演示
1 @{ 2 ViewData["Title"] = "About"; 3 } 4 <h2>@ViewData["Title"].</h2> 5 6 @await Component.InvokeAsync("OnePart") 7 8 <h3>@ViewData["Message"]</h3> 9 10 <p>Use this area to provide additional information.</p>
F5运行,点击About,转到About页面:
2.视图组件的控制器返回值
对于正式使用,可能会还会用到Model,在ViewComponent控制器中返回一个model。model文件夹并无明确要求,对视图组件来说,一般放在 ViewModels 文件夹下,在ViewModels 文件夹下新建 OnePart.class
1 namespace AspCoreTest.ViewModels 2 { 3 public class OnePart 4 { 5 /// <summary> 6 /// 姓名 7 /// </summary> 8 public string name { get; set; } 9 10 /// <summary> 11 /// 性别 12 /// </summary> 13 public string sex { get; set; } 14 } 15 }
在控制器中使用该Model处理数据,并返回给视图
1 using Microsoft.AspNetCore.Mvc; 2 using AspCoreTest.ViewModels; 3 4 namespace AspCoreTest.ViewComponents 5 { 6 public class OnePartViewComponent : ViewComponent 7 { 8 //public async Task<IViewComponentResult> InvokeAsync() 9 public IViewComponentResult Invoke() 10 { 11 ViewData["Msg"] = "别看了,我就是分布视图"; 12 13 OnePart onePart = new OnePart();//声明model 14 //数据处理 15 onePart.name = "Runing"; 16 onePart.sex = "男"; 17 18 //返回model 19 return View(onePart); 20 } 21 } 22 }
在视图中使用model的数据
@using AspCoreTest.ViewModels @model OnePart <h1>@ViewData["Msg"]</h1> <table> <tr> <td>姓名</td> <td>性别</td> </tr> <tr> <td>@Model.name</td> <td>@Model.sex</td> </tr> </table>
OK,视图组件中使用Model大致流程就是这样,是不是感觉很简单
3.注意事项总结
a.固定命名规则:
文件夹:控制器文件夹 ViewComponents,
视图文件夹有两种选择:1.某个控制器(如:Home)专用的视图组件 {Home}/Components/{ViewComponent}/
2.全局的视图组件 Shared/Components/{ViewComponent}/
控制器:名 + ViewComponent
视图:Default.cshtml为默认查找的视图,若自定义视图名,在需要在ViewComponent控制器中返回时指定该视图即可
return View("MyView");
b.视图组件控制器中 Invoke()、InvokeAsunc()两个方法必须有且仅能有一个