Asp.net vNext 2
Asp.net vNext 学习之路(二)
View component(视图组件)应该是MVC6 新加的一个东西,类似于分部视图。本文将演示在mvc 6中 怎么添加视图组件以及怎么在视图中注入一个服务。
本文包括以下内容:
1,创建一个新的asp.net vNext 项目。
2,安装 KVM(K version manager)。
3,如何运行EF 数据库迁移。
4,什么是 view component。
5,如何在 mvc 6 中添加一个view component 。
6,如何在view 中注入一个服务。
一 创建一个新的asp.net vNext 项目
打开vs 2015 。 File>New >Project>Templates>C#>Web>Asp.Net Application 点击OK。然后选择 New ASP.NET Project :

由于是演示我就在Home的文件下新建一个视图Test.cshtml 相应的HomeController 添加如下代码:
1 public IActionResult Test()
2 {
3 return View();
5 }
在Models 文件夹里新建一个TestModel类:

1 public class TestModel
2 {
3 public int ID { get; set; }
4
5 public string Title { get; set; }
6 }

然后在 Models\IdentityModels.cs 文件的 ApplicationDbContext类中添加一句代码:
1 public DbSet<TestModel> TestItems { get; set; }
表示我们加了一张表在数据库中。但是现在运行肯定会报错,我们需要安装KVM。
二 安装 KVM(K version manager)
首先在管理员权限下运行cmd。然后把下面这句代码拷进去。
1 @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.ps1'))"
如果成功的话说明KVM安装成功了。

然后重新打开一个cmd 。输入 KVM upgrade 成功之后我们就可以做EF的迁移了。

三 如何运行EF 数据库迁移
首先打开cmd 然后我们需要进入项目的当前目录:接下来运行 k ef migration add initial k ef migration applay

ok 这样 ef 就迁移好了,我们会发现项目中多了一些东西

然后我们需要在Startup.cs 中的 Configure 方法中 添加如下代码:

1 app.UseServices(service =>
2 {
3 service.AddEntityFramework()
4 .AddSqlServer()
5 .AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(
6 Configuration.Get("Data:DefaultConnection:ConnectionString")));
7 });

在HomeController 中部分代码:

1 ApplicationDbContext context = new ApplicationDbContext();
2
3 public IActionResult Index()
4 {
5 return View();
6 }
7
8 public IActionResult Test()
9 {
10 context.Add(new TestModel() { Title = "test1" });
11
12
13 context.SaveChanges();
14
15 List<TestModel> list = context.Set<TestModel>().ToList();
16
17 return View(list);
18 }
19
20 protected override void Dispose(bool disposing)
21 {
22 base.Dispose(disposing);
23
24 context.Dispose();
25 }

Test.cshtml 文件代码:

1 @model List<WebApplication3.Models.TestModel>
2
3 @{
4 ViewBag.Title = "Test";
5
6 }
7 <table class="table table-hover table-bordered table-condensed">
8 <thead>
9 <tr>
10 <th>ID</th>
11 <th>Title</th>
12 </tr>
13 </thead>
14 <tbody>
15 @foreach (var item in Model)
16 {
17 <tr>
18 <td>@item.ID</td>
19 <td>@item.Title</td>
20 </tr>
21 }
22
23 </tbody>
24 </table>

Ok 运行一下项目效果如下:

四 什么是 view component
作为Mvc6 新添加的东西和之前的partial view 还是比较类似的。但是要比partial view 更加的灵活和强大。和controller 和 view的关系一样是关注点分离的, component 相当于是一个mini的controller
它是去响应局部的模块而非是完整的。我们可以用view component 来解决更加复杂的页面上的问题。它有两部分组成 一个后台类和前台的Razor view (可以回掉后台类的方法)。
五 如何在 mvc 6 中添加一个view component
首先我在项目中新建一个ViewComponents的文件夹(这个文件夹名字可以随意命名),然后文件夹里新建一个 TestViewComponent 类 :

1 public class TestViewComponent : ViewComponent
2 {
3 ApplicationDbContext context;
4
5
6 public TestViewComponent(ApplicationDbContext context)
7 {
8 this.context = context;
9 }
10
11 public IViewComponentResult Invoke(int max)
12 {
13 var item = context.Set<TestModel>().Where(p => p.ID > max).ToList();
14
15 return View(item);
16 }
17
18 }

然后我们需要添加一个 component view 。在 Home文件夹新建Components(必须这样命名)文件夹然后 里面新建一个文件夹 Test(这个名字是和之前的那个TestComponent 相匹配的)
Test 文件夹里新建 一个视图,随意命名 default.cshtml

1 @model List<WebApplication3.Models.TestModel>
2 @{
3 // ViewBag.Title = "Home Page";
4 }
5
6 <h3>Priority Items</h3>
7 <ul>
8 @foreach (var item in Model)
9 {
10 <li>@item.ID ----- @item.Title</li>
11 }
12 </ul>

那么我们就可以去调这个view component了 在Test.cshtml

1 @model List<WebApplication3.Models.TestModel>
2
3 @{
4 ViewBag.Title = "Test";
5
6 }
7 <table class="table table-hover table-bordered table-condensed">
8 <thead>
9 <tr>
10 <th>ID</th>
11 <th>Title</th>
12 </tr>
13 </thead>
14 <tbody>
15 @foreach (var item in Model)
16 {
17 <tr>
18 <td>@item.ID</td>
19 <td>@item.Title</td>
20 </tr>
21 }
22
23 </tbody>
24 </table>
25
26 <div class="row">
27 @Component.Invoke("Test", 2);
28 </div>

Ok 看一下效果 :

那个view components 的意思是所有ID>2的列表。
六 如何在view 中注入一个服务
首先新建一个StaticService 类

1 public class StatisticsService
2 {
3 private ApplicationDbContext db;
4
5 public StatisticsService(ApplicationDbContext db)
6 {
7 this.db = db;
8 }
9
10
11 public int GetCount()
12 {
13 return db.TestItems.Count();
14 }
15
16 }

然后Test.cshtml 代码:

1 @model List<WebApplication3.Models.TestModel>
2 @inject WebApplication3.Models.StatisticsService service
3 <table class="table table-hover table-bordered table-condensed">
4 <thead>
5 <tr>
6 <th>ID</th>
7 <th>Title</th>
8 </tr>
9 </thead>
10 <tbody>
11 @foreach (var item in Model)
12 {
13 <tr>
14 <td>@item.ID</td>
15 <td>@item.Title</td>
16 </tr>
17 }
18
19 </tbody>
20 </table>
21
22 <div class="row">
23 @Component.Invoke("Test", 2);
24 </div>
25
26 <h1>
27 Total: @service.GetCount()
28 </h1>

在 startup.cs 中注册该类:

1 public void ConfigureServices(IServiceCollection services)
2 {
3 // Add EF services to the services container.
4 services.AddEntityFramework(Configuration)
5 .AddSqlServer()
6 .AddDbContext<ApplicationDbContext>();
7
8 // Add Identity services to the services container.
9 services.AddDefaultIdentity<ApplicationDbContext, ApplicationUser, IdentityRole>(Configuration);
10
11 // Add MVC services to the services container.
12 services.AddMvc();
13
14 services.AddTransient<StatisticsService>();
15 // Uncomment the following line to add Web API servcies which makes it easier to port Web API 2 controllers.
16 // You need to add Microsoft.AspNet.Mvc.WebApiCompatShim package to project.json
17 // services.AddWebApiConventions();
18
19 }

运行 看效果:

七 总结
Mvc 6 还是加了不少的东西的,不过只会让以后的开发会原来越简单。
Asp.net vNext 2的更多相关文章
- POCO Controller 你这么厉害,ASP.NET vNext 知道吗?
写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 POJO 与 PO.VO 的区别 POJO 的扩展 POCO VS DTO Controller 是什么? 关于 P ...
- 兼容Mono的下一代云环境Web开发框架ASP.NET vNext
微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cl ...
- 在Linux上运行ASP.NET vNext
最新的ASP.NET vNext完全开源且可以跨多个平台运行,在Windows环境下我尝试了下,几乎没花什么工夫就跑起了Sample,而在Linux环境下则要多花了不少时间,所以特别记录下整个过程,希 ...
- 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。
写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...
- Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建
最新的asp.net vnext已经可以支持在mac上运行了,当然用的是mono.相比linux来说,mac的安装略显繁琐.对于大部分用Windows开发asp.net的程序员来说,初次配置还是很费时 ...
- 分享我对 ASP.NET vNext 的一些感受,也许多年回过头看 So Easy!
写在前面 阅读目录: Visual Studio "14" CTP 关于 ASP.NET vNext ASP.NET vNext 实践 后记 ASP.NET vNext 发布已经过 ...
- 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试
继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...
- 开发 ASP.NET vNext 初步总结(使用Visual Studio 14 CTP1)
新特性: vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存). 可以self-host模式 ...
- ASP.NET vNext 概述
兼容Mono的下一代云环境Web开发框架ASP.NET vNext 我们知道了ASP.NET vNext是一个全新的框架,是一个与时俱进的框架.这篇文章将深入讨论在整体架构更多的细节,文档参照 ASP ...
- [译]Introducing ASP.NET vNext and MVC 6
原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source=tuicool Part of the ASP.NET vNext init ...
随机推荐
- 如果不能显示真正的考验个别车型toast问题解决
当真正的考验个别车型toast不显示信息,找到两个解决方式.不知还有什么其他有效方法.期待大神们的分享!.! 1.手动方案:设置-->应用软件管理-->相应APP-->勾选显示通知框 ...
- WPF学习(6)路由事件
做过.net开发的朋友对于事件应该都不陌生.追溯历史,事件(Event)首先应用在Com和VB上,它是对在MFC中使用的烦琐的消息机制的一个封装,然后.net又继承了这种事件驱动机制,这种事件也叫.n ...
- Java IO的RandomAccessFile的使用(转)
现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下“Lucene是一款非常优秀的全文检索库”.可能大多数朋友会觉得这个需求很easy,说实话,确实easy,然后XXX君开始实 ...
- SpringMVC源代码深度分析DispatcherServlet核心的控制器(初始化)
SpringMVC是非常优秀的MVC框架,每一个框架都是为了我们提高开发效率,我们试图通过对SpringMVC的源码去了解这个框架,了解整个设计思想,框架要有扩展性,这里用的比較多是接口和抽象,是框架 ...
- PAAS平台7×24小时可用性应用设计
如今非常多企业都在搭建自己的私有PAAS平台,当然也有非常多大型互联网公司搭建共同拥有PAAS平台(比如SAE/BAE/JAE(jae.jd.com)).那么使用PAAS平台来部署SAAS应用有哪些优 ...
- Web Host消息处理管道
Web Host消息处理管道 前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和 ...
- Sql示例说明如何分组后求中间值--【叶子】
原文:Sql示例说明如何分组后求中间值--[叶子] 这里所谓的分组后求中间值是个什么概念呢? 我举个例子来说明一下: 假设我们现在有下面这样一个表: type name price -- ...
- c++读取文本文件
#include<iostream> #include<fstream> using namespace std; int main() { int a,b=-100000,c ...
- 敏感字符串加密处理(PHP实现)
/** * 敏感字符串加密处理 * @param $raw_str 原始字符串 * @param $before 前面保留的显示位数 * @param $after 后面保留的显示位数 * @para ...
- JavaEE(18) - JPA原生SQL查询和存储过程
1. 使用原生SQL执行查询 2. 映射原生SQL查询的结果集 3. 使用原生SQL查询执行实体查询 4. 命名原生SQL查询 5. 在JPQL查询中调用存储过程