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帮助类] ] 路由是一个模式匹配系统,它确保 ...
随机推荐
- MongoDB的下载、安装与部署方法
1.什么是MongoDB? 它是介于关系型数据库和非关系型数据库之间的一种NoSQL数据库,用C++编写,是一款集敏捷性.可伸缩性.扩展性于一身的高性能的面向文档的通用数据库. 2.为什么要用Mong ...
- 利用ligerUI隐藏某列,并不产生空白列的方法
var grid;//声明变量 $(function () { //grid初始化 grid = $("#maingrid4").ligerGrid({ columns: [ { ...
- Hash Table-720. Longest Word in Dictionary
Given a list of strings words representing an English Dictionary, find the longest word in words tha ...
- byte范围及8种常见数据类型
byte范围:-128 到 127 原因 : 在计算机内,定点数有3种表示法:原码.反码和补码 原码 :二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小. 反码 ...
- MVC各部分技术体现
视图层用jsp,javascript 作用--显示数据,接受用户输入数据 控制层用servlet 作用--接收视图层数据,传输 给业务逻辑层(即模型层) 模型层用普通java class 作用-- ...
- JavaScript里的Date 对象属性及对象方法--实现简单的日历
上网搜索"js 日历插件"就会出来各种效果的功能丰富的日历插件,很多都可以下载源码,然后根据各自的需求对源码进行修改就可以直接用了. 但今天讲的不是如何使用这些插件,而是讲如何实现 ...
- python3 内置函数详解
内置函数详解 abs(x) 返回数字的绝对值,参数可以是整数或浮点数,如果参数是复数,则返回其大小. # 如果参数是复数,则返回其大小. >>> abs(-25) 25 >&g ...
- 【xsy1143】 兔子的数字 搜索
题目大意:请找到第$k$大的数,满足各位数字之和等于各位数字之积.其中$k≤10^{18}$. 首先我们要确定这个第$k$大的数有多大 我们用$f[i][j][he][ji]$表示我们要搜索一个$i$ ...
- UML入门 之 交互图 -- 时序图 协作图详解
作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/17927131 动态图概念 : 从静态图中抽取瞬间值的变化描 ...
- 剑指offer五十四之字符流中第一个不重复的字符
一.题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...