zoukankan      html  css  js  c++  java
  • ASP.NET MVC 获得 view 中的HTML并将其中的内容自动转换成繁体中文。

    一、思路

    1.获得 asp.net mvc 输出的 html 的字符串。

    2.将拿到的 html 字符串中的简体中文转换成繁体中文。

    3.输出 html。

    二、实现

    1.扩展 RazorView 视图。

        public class MainRazorView : RazorView
        {
            private readonly ILogger _logger;
    
            public MainRazorView(ControllerContext controllerContext, string viewPath, string layoutPath, bool runViewStartPages, IEnumerable<string> viewStartFileExtensions)
                : base(controllerContext, viewPath, layoutPath, runViewStartPages, viewStartFileExtensions)
            {
                _logger = LoggerFactory.Current.Create();
            }
    
            public MainRazorView(ControllerContext controllerContext, string viewPath, string layoutPath, bool runViewStartPages, IEnumerable<string> viewStartFileExtensions, IViewPageActivator viewPageActivator)
                : base(controllerContext, viewPath, layoutPath, runViewStartPages, viewStartFileExtensions, viewPageActivator)
            {
                _logger = LoggerFactory.Current.Create();
            }
    
            protected override void RenderView(ViewContext viewContext, TextWriter writer, object instance)
            {
                using (var sw = new StringWriter())
                {
                    try
                    {
                        //将最终生成的 html 写入到 StringWriter 中,由于这里没有使用 writer 所以当执行完这步的时候,并没有输出显示页面。
                        base.RenderView(viewContext, sw, instance);
    
                        //拿到了 html 的字符串。
                        var html = sw.GetStringBuilder().ToString();
    
                        //转换成繁体中文。
                        html = html.ToTwZh();
    
                        //输出显示页面,只有执行完该操作才真正显示页面。
                        writer.Write(html);
                    }
                    catch (Exception exception)
                    {
                        _logger.Fatal("输出 HTML 失败。", exception);
                    }
                }
            }
        }

    ToTwZh(),这里使用了ChineseConverter库,可以直接在 Nuget 上下载,下面是扩展方法:

            /// <summary>
            /// 简体中文转成繁体中文。
            /// </summary>
            /// <param name="source"></param>
            /// <returns></returns>
            public static string ToTwZh(this string source)
            {
                return ChineseConverter.Convert(source, ChineseConversionDirection.SimplifiedToTraditional);
            }

    2.扩展 RazorViewEngine 引擎。

    public class MainRazorViewEngine : RazorViewEngine
        {
            protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
            {
                var razorView = (RazorView)base.CreatePartialView(controllerContext, partialPath);
    
                if (razorView != null)
                {
                    razorView = new MainRazorView(controllerContext, razorView.ViewPath, razorView.LayoutPath, razorView.RunViewStartPages, razorView.ViewStartFileExtensions);
                }
    
                return razorView;
            }
    
            protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
            {
                var razorView = (RazorView)base.CreateView(controllerContext, viewPath, masterPath);
    
                if (razorView != null)
                {
                    razorView = new MainRazorView(controllerContext, razorView.ViewPath, razorView.LayoutPath, razorView.RunViewStartPages, razorView.ViewStartFileExtensions);
                }
    
                return razorView;
            }
        }

    3.在MvcApplication中注册视图引擎。

        public class MvcApplication : HttpApplication
        {
            protected void Application_Start()
            {
                ...
    
                ViewEngines.Engines.Clear();
                ViewEngines.Engines.Add(new MainRazorViewEngine());
            }
        }
  • 相关阅读:
    【彩彩只能变身队】后端工作总结
    彩彩只能变身队团队项目进展记录by后端
    一周工作+会议汇报(6.3)
    【彩彩只能变身队】第七次会议
    【彩彩只能变身队】第六次会议
    这个博客正式废用了!!!!搬家了!!!!
    [软件工程]一些不错的学习网站
    NWERC 2015 Problem H: Hole in One
    HDU 5970 CCPC2016合肥 求等差数列整除整数下取整求和
    [软件工程]python 发送邮件网易邮箱163示范
  • 原文地址:https://www.cnblogs.com/cjnmy36723/p/5286739.html
Copyright © 2011-2022 走看看