.net core 学习笔记(4)-ViewComponent
动态菜单,以前用的是Html.Action(url)来获取的,到了 .net core 中忽然发现没有了这个方法,原来在 .net core 中是提供了个 ViewComponent,有点类似以前的用户控件。
1.创建一个ViewComponent,首先要注意的就是后缀名字得是【ViewComponent】,这个和创建控制器一样的。然后就是必须要实现Invoke/InvokeInvokeAsync 方法,后者看后缀就知道是异步的。我这里用的是异步的方法
public class MenuViewComponent : ViewComponent
{
IMenuService _menuService; public MenuViewComponent(IMenuService menuservice)
{
_menuService = menuservice;
}
/// <summary>
/// 获取菜单视图,页面输出缓存,时间是30天
/// </summary>
/// <returns></returns>
[ResponseCache( Duration = 259200)]
public async Task<IViewComponentResult> InvokeAsync(string status)
{ var list = await GetMenuAsync();
return View(list);
// return View("_LeftMenu",list); //调用share文件夹下的Component
} private Task<List<MenuDto>> GetMenuAsync() { return Task.FromResult(_menuService.MenuGetList().Where(c => c.IsLock == 0).ToList()); }
2.创建视图,和控制器的视图是一个套路,不过这个是在哪个控制的视图中调用,就要把视图建在哪个控制器的视图文件下,说起来有点拗口,举例来说我的动态菜单要是在Home 控制器index页面调用,那就需要在View/Home/文件夹下面新建一个 Component 文件夹,注意文件夹名字必须是这个,再在这个文件夹下新建一个叫Menu的文件夹(即你新建的ViewComponet的名字),最后就是创建视图页面了,这个页面的名字默认是Default,这样你在你的Invoke方法中 不指定名字直接返回 View的时候,找的就是这个default视图。如果你想取个其他的名字比如叫Menu,那invoke中返回的就应该是 return View("Menu",model) 。
因为菜单是全局的,所以我是把我的viewcomponent放在了share文件夹中,这样每个页面都能访问到,文件夹结构如下,invoke返回的时候指定下名字就行

3.调用。在需要访问的页面中调用 @await Component.InvokeAsync("Menu",new { status ="admin"});这个方法的参数是可自定义的,就看你自己需要写啥
.net core 学习笔记(4)-ViewComponent的更多相关文章
- .NET CORE学习笔记系列(2)——依赖注入[7]: .NET Core DI框架[服务注册]
原文https://www.cnblogs.com/artech/p/net-core-di-07.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IS ...
- .NET CORE学习笔记系列(2)——依赖注入[6]: .NET Core DI框架[编程体验]
原文https://www.cnblogs.com/artech/p/net-core-di-06.html 毫不夸张地说,整个ASP.NET Core框架是建立在一个依赖注入框架之上的,它在应用启动 ...
- .NET CORE学习笔记系列(2)——依赖注入[5]: 创建一个简易版的DI框架[下篇]
为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在上篇中我们介绍了Cat的基本编程模式,接下来我们就来聊聊Cat的 ...
- .NET CORE学习笔记系列(2)——依赖注入[4]: 创建一个简易版的DI框架[上篇]
原文https://www.cnblogs.com/artech/p/net-core-di-04.html 本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章从 ...
- .NET CORE学习笔记系列(2)——依赖注入【3】依赖注入模式
原文:https://www.cnblogs.com/artech/p/net-core-di-03.html IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架中以实现对流 ...
- .NET CORE学习笔记系列(2)——依赖注入【2】基于IoC的设计模式
原文:https://www.cnblogs.com/artech/p/net-core-di-02.html 正如我们在<控制反转>提到过的,很多人将IoC理解为一种“面向对象的设计模式 ...
- .NET CORE学习笔记系列(2)——依赖注入【1】控制反转IOC
原文:https://www.cnblogs.com/artech/p/net-core-di-01.html 一.流程控制的反转 IoC的全名Inverse of Control,翻译成中文就是“控 ...
- .NET Core学习笔记(7)——Exception最佳实践
1.为什么不要给每个方法都写try catch 为每个方法都编写try catch是错误的做法,理由如下: a.重复嵌套的try catch是无用的,多余的. 这一点非常容易理解,下面的示例代码中,O ...
- .net core学习笔记,组件篇:服务的注册与发现(Consul)初篇
1.什么是服务注册中心? 在学习服务注册与发现时,我们要先搞明白到底什么是服务注册与发现. 在这里我举一个生活中非常普遍的例子——网购来简单说明,网购在我们日常生活中已经是非常普遍了,其实网购中的(商 ...
- Asp.Net Core学习笔记:入门篇
Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...
随机推荐
- flask笔记3-模板
flask框架使用jinja2模板引擎.简单的说,模板就是一个纯html文件中夹杂着占位符,在渲染模板时用真实变量值替换占位符,就形成了最终的前台页面. 1.模板存放位置: 默认情况下,flask在根 ...
- SPSS数据分析—多维偏好分析(MPA)
之前的主成分分析和因子分析中,收集的变量数据都是连续型数值,但有时会碰到分类数据的情况,我们知道最优尺度变换可以对分类变量进行量化处理,如果将这一方法和主成分分析相结合,就称为了基于最优尺度变换的主成 ...
- JavaScipt 样式操作
我们知道HTML样式定义的三种方式: <link/>外部引入也就是定义 CSS 中的 <style/>嵌入式样式 style特性地定义 给一个HTML元素设置css属性,如: ...
- 关于小组所要做的APP的想法
关于小组所要做的app,我们敲定下来是做关于在线做题的app,但是,纯粹的做题目的app我认为并没有什么大的吸引力,尤其是拿手机做题.所以,我们考虑准备在以下几个方面做功夫以增加吸引力.第一,我们的题 ...
- 关于rem的学习
网页常见单位px.em.rem:其中rem是css3新出的单位,官网是这样定义的:“font size of the root element”,意思是:相对长度单位,相对于根元素(即html元素)f ...
- nodeType的意思
nodeType是用来获得当前节点对象的类型.nodeType 属性可返回节点的类型.元素element 1 属性attr 2 文本text 3 注释comments 8 ...
- phpize建立php扩展 Cannot find config.m4
centos php 安装 memcache 扩展的时候 爆 Cannot find config.m4 错误 解决方案参考以下文章 参考文章 http://blog.csdn.net/wgl ...
- UVA 11624 Fire!
题目大意: F代表火焰 J代表人 一个人想在火焰烧到自己之前逃出着火地区 . 为路,人可以走,火可以燃烧(当然如果火先烧到就不能走了) #为墙,不可走 如果能逃出,输出时间,不能,输出IMPOSSIB ...
- 转:solr6.0配置中文分词器IK Analyzer
solr6.0中进行中文分词器IK Analyzer的配置和solr低版本中最大不同点在于IK Analyzer中jar包的引用.一般的IK分词jar包都是不能用的,因为IK分词中传统的jar不支持s ...
- function,new function,Function,new Function 之间的区别
测试一: var fud01 = function() { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typ ...