概述


Iview定义很简单,就是根据View上下文和TextWriter对象实现对View的呈现。

实现


实现IViewEngine

  1. public class TestViewEngine : IViewEngine
  2. {
  3. public ViewEngineResult FindPartialView(ActionContext context, string partialViewName)
  4. {
  5.  
  6. //如果viewName等于partial-test-view 就采用 TestPartialView
  7. if (string.Equals(partialViewName, "partial-test-view", StringComparison.Ordinal))
  8. {
  9. return ViewEngineResult.Found(partialViewName, new TestPartialView());
  10. }
  11. return ViewEngineResult.NotFound(partialViewName, new[] { partialViewName });
  12. }
  13.  
  14. public ViewEngineResult FindView(ActionContext context, string viewName)
  15. {
  16. //如果viewName等于test-view 就采用 TestView
  17. if (string.Equals(viewName, "test-view"))
  18. {
  19. return ViewEngineResult.Found(viewName, new TestView());
  20. }
  21. return ViewEngineResult.NotFound(viewName, new[] { viewName });
  22. }
  23. }

实现IView

  1. public class TestPartialView : IView
  2. {
  3. public string Path { get; set; }
  4.  
  5. public async Task RenderAsync(ViewContext context)
  6. {
  7. //这里没有视图,就把 world 输出浏览器
  8.  
  9. await context.Writer.WriteLineAsync("world");
  10. }
  11. }
  1. public class TestView : IView
  2. {
  3. public string Path { get; set; }
  4.  
  5. public async Task RenderAsync(ViewContext context)
  6. {
  7.  
  8. await context.Writer.WriteLineAsync("<img src='"+context.ViewBag.Images + "' />");
  9. }
  10. }

控制器

  1. public class HomeController: Controller
  2. {
  3. public ViewResult Index()
  4. {
  5. return View();
  6. }
  7. public ViewResult TestView()
  8.  
  9. {
  10.  
  11. ViewBag.Images = "/images/ASP-NET-Banners-01.png";
  12. return View("test-view");
  13.  
  14. }
  15.  
  16. }

启动类

  1. public class Startup
  2. {
  3.  
  4. public void ConfigureServices(IServiceCollection services)
  5. {
  6.  
  7. services.AddMvc()
  8. .ConfigureMvc(options =>
  9. {
  10. //加入视图引擎
  11. options.ViewEngines.Insert(, typeof(TestViewEngine));
  12. });
  13. }
  14.  
  15. public void Configure(IApplicationBuilder app)
  16. {
  17. app.UseMvc(routes =>
  18. {
  19. routes.MapRoute(
  20. name: "default",
  21. template: "{controller=Home}/{action=Index}/{id?}");
  22. });
  23. }
  24. }

运行

表达有限这里有一篇介绍的文章:http://www.cnblogs.com/artech/archive/2012/08/22/view-engine-01.html

源码下载http://pan.baidu.com/s/1qWOcZ0K

Asp.net Vnext 实现IView的更多相关文章

  1. POCO Controller 你这么厉害,ASP.NET vNext 知道吗?

    写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 POJO 与 PO.VO 的区别 POJO 的扩展 POCO VS DTO Controller 是什么? 关于 P ...

  2. 兼容Mono的下一代云环境Web开发框架ASP.NET vNext

    微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cl ...

  3. 在Linux上运行ASP.NET vNext

    最新的ASP.NET vNext完全开源且可以跨多个平台运行,在Windows环境下我尝试了下,几乎没花什么工夫就跑起了Sample,而在Linux环境下则要多花了不少时间,所以特别记录下整个过程,希 ...

  4. 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。

    写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...

  5. Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建

    最新的asp.net vnext已经可以支持在mac上运行了,当然用的是mono.相比linux来说,mac的安装略显繁琐.对于大部分用Windows开发asp.net的程序员来说,初次配置还是很费时 ...

  6. 分享我对 ASP.NET vNext 的一些感受,也许多年回过头看 So Easy!

    写在前面 阅读目录: Visual Studio "14" CTP 关于 ASP.NET vNext ASP.NET vNext 实践 后记 ASP.NET vNext 发布已经过 ...

  7. 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试

    继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...

  8. 开发 ASP.NET vNext 初步总结(使用Visual Studio 14 CTP1)

    新特性: vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存). 可以self-host模式 ...

  9. ASP.NET vNext 概述

    兼容Mono的下一代云环境Web开发框架ASP.NET vNext 我们知道了ASP.NET vNext是一个全新的框架,是一个与时俱进的框架.这篇文章将深入讨论在整体架构更多的细节,文档参照 ASP ...

随机推荐

  1. 科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)

    Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...

  2. python---协程理解

    推文:python---基础知识回顾(七)迭代器和生成器 推文:Python协程深入理解(本文转载于该文章) 从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数.yield在协程中 ...

  3. memset函数使用详解

    1.void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c. 2.例子#include void main(){cha ...

  4. NGINX配置PHP解析

    <?php phpinfo(); ?> location ~ \.php$ { root html; fastcgi_pass ; fastcgi_index index.php; fas ...

  5. Linux启动的流程

    2017年1月10日, 星期二 Linux启动的流程   null

  6. Java并发编程原理与实战三十五:并发容器ConcurrentLinkedQueue原理与使用

    一.简介 一个基于链接节点的无界线程安全队列.此队列按照 FIFO(先进先出)原则对元素进行排序.队列的头部 是队列中时间最长的元素.队列的尾部 是队列中时间最短的元素.新的元素插入到队列的尾部,队列 ...

  7. java多线程获取返回结果--Callable和Future示例

    package test.guyezhai.thread; import java.util.ArrayList; import java.util.Date; import java.util.Li ...

  8. 【BZOJ】2310: ParkII 插头DP

    [题意]给定m*n的整数矩阵,求经过所有点至多一次路径的最大数值和.n<=8,m<=100. [算法]插头DP [题解]最小表示法确实十分通用,处理简单路径问题只需要状态多加一位表示独立插 ...

  9. 【leetcode 简单】 第五十七题 删除链表中的节点

    删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4 ...

  10. hdu 1004 Let the Balloon Rise(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1004 Let the Balloon Rise Time Limit: 2000/1000 MS (J ...