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());
}
}
ASP.NET MVC 获得 view 中的HTML并将其中的内容自动转换成繁体中文。的更多相关文章
- asp.net mvc 在View中获取Url参数的值
如果url是 /home/index?id=3 直接Request就ok. 但是如果路由设定为:{controller}/{action}/{id} url是 /home/index/3 这时想在 ...
- TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE
TransactionScope事务处理方法介绍及.NET Core中的注意事项 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...
- 返璞归真 asp.net mvc (4) - View/ViewEngine
原文:返璞归真 asp.net mvc (4) - View/ViewEngine [索引页] [源码下载] 返璞归真 asp.net mvc (4) - View/ViewEngine 作者:web ...
- ASP.NET MVC 之View
仅此一文让你明白ASP.NET MVC 之View的显示(仅此一文系列二) 题外话 一周之前写的<仅此一文让你明白ASP.NET MVC原理>受到了广大学习ASP.NET MVC同学的 ...
- ASP.NET MVC开发学习过程中遇到的细节问题以及注意事项
1.datagrid中JS函数传值问题: columns: { field: 'TypeName', title: '分类名称', width: 120, sortable: true, format ...
- 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能
在ASP.NET MVC应用程序中,如果使用Server.Transfer()方法希望将请求转发到其它路径或者Http处理程序进行处理,都会引发“为xxx执行子请求时出错”的HttpException ...
- ASP.NET MVC 3: Razor中的@:和语法
原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor’s @: and <text> syntax[原文发表时间] De ...
- 预热ASP.NET MVC 的View
ASP.NET MVC 的View 预设是Load on Demand(按需加载),也就是说View 第一次要Render 的时候才会去载入跟编译,这个就会造成一个现象,即使Web 应用程式已经完成启 ...
- 7.ASP.NET MVC 5.0中的Routing【路由】
大家好,这一篇向大家介绍ASP.NET MVC路由机制.[PS:上一篇-->6. ASP.NET MVC 5.0中的HTML Helpers[HTML帮助类] ] 路由是一个模式匹配系统,它确保 ...
随机推荐
- 第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()
最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final Reentrant ...
- Day 11 作业题
1.整理装饰器的形成过程,背诵装饰器的固定格式 固定格式 def wrapper(func): def inner(*args, **kwargs): #执行函数前进行的操作 ret = func(* ...
- Mac 切换到行首和行末的方法
苹果笔记本没有home键和end键 但是使用 command + 方向键左键可以回到行首, command + 方向键右键可以去到行末
- vue的无缝滚动插件vue-seamless-scroll的安装与使用
npm安装地址 https://www.npmjs.com/package/vue-seamless-scroll 命令行执行: npm install vue-seamless-scroll --s ...
- 【12】JMicro微服务-Zookeeper
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到11小节 1. CuratorFramework支持 JMicro目前基于Zookeeper实现统 ...
- h5在线1v1客服|web在线客服系统|h5即时聊天
网上有很多环信.美恰之类的客服系统,最近也使用h5+css3+fontJs+swiper+wcPop等技术架构开发了一个在线客服(1v1沟通聊天),可以应用到在线临时聊天.在线咨询等情景.实现了消息. ...
- Docker学习--docker的基本认识
1.Docker 架构 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. 容器与镜像的关系类似于 ...
- 使用canvas绘制渐变色矩形和使用按键控制人物移动
使用canvas绘制渐变色矩形和使用按键控制人物移动 1.使用canvas绘制渐变色矩形 效果演示 相关代码: <!DOCTYPE html> <html lang="en ...
- Windows 添加用户
不多说,直接干货! 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 同时,大家可以关注我的个人博客: http://www.cnblogs.com/zl ...
- ES6-Proxy and Reflect
依赖文件地址 :https://github.com/chanceLe/ES6-Basic-Syntax/tree/master/js <!DOCTYPE html> <html&g ...