zoukankan      html  css  js  c++  java
  • Asp.net Vnext 实现IView

    概述


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

    实现


    实现IViewEngine

      public class TestViewEngine : IViewEngine
        {
            public ViewEngineResult FindPartialView(ActionContext context, string partialViewName)
            {
    
                //如果viewName等于partial-test-view 就采用 TestPartialView 
                if (string.Equals(partialViewName, "partial-test-view", StringComparison.Ordinal))
                {
                    return ViewEngineResult.Found(partialViewName, new TestPartialView());
                }
                return ViewEngineResult.NotFound(partialViewName, new[] { partialViewName });
            }
    
            public ViewEngineResult FindView(ActionContext context, string viewName)
            {
                //如果viewName等于test-view 就采用 TestView 
                if (string.Equals(viewName, "test-view"))
                {
                    return ViewEngineResult.Found(viewName, new TestView());
                }
                return ViewEngineResult.NotFound(viewName, new[] { viewName });
            }
        }

    实现IView

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

    控制器

     public class HomeController: Controller
            {
            public ViewResult Index()
            {
                return View();
            }
            public ViewResult TestView()
    
                {
    
    
                ViewBag.Images = "/images/ASP-NET-Banners-01.png";       
                return View("test-view");
           
                }
         
        }

    启动类

     public class Startup
        {
           
            public void ConfigureServices(IServiceCollection services)
            {
             
                services.AddMvc()
                    .ConfigureMvc(options =>
                    {
                        //加入视图引擎
                        options.ViewEngines.Insert(0, typeof(TestViewEngine));
                    });
                }
    
            public void Configure(IApplicationBuilder app)
            {
                app.UseMvc(routes =>
                {
                    routes.MapRoute(
                        name: "default",
                        template: "{controller=Home}/{action=Index}/{id?}");
                });
            }
        }

    运行

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

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

  • 相关阅读:
    CH负责内容的两个人——北漂18年(66)
    perl 跨行匹配;
    elk之nginx
    perl 分析binlog 定位错误sql 思路
    rsyslog 日志格式和输出
    rsyslog 定义模板
    rsyslog ~ 波浪号
    过滤器
    rsyslog masg和rawmsg的区别
    金融行业的BI应用分析
  • 原文地址:https://www.cnblogs.com/liek/p/4620612.html
Copyright © 2011-2022 走看看