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帮助类] ] 路由是一个模式匹配系统,它确保 ...
随机推荐
- .Net 百度经纬度转高德
1.需求 由于我们项目里面的经纬坐标是百度的,而对接的第三方需要的是高德的经纬坐标,两者之间是有位差区别的,不能直接使用,我们需要通过一个算法将百度经纬度转化为高德经纬度,在百度官网上,有java算法 ...
- Day6 ,周期末考试试题
Python基础数据类型考试题 考试时间:两个半小时 满分100分(80分以上包含80分及格) 一,基础题. 1,简述变量命名规范(3分) 2,字节和位的关系 ...
- click 版本升级7.0踩过的坑
click 版本升级7.0踩过哪些坑? click 版本6.7升级至7.0以上,包名由 click 变更为 Click click 的 Options 和 Parameters 规则变更为如下: Fo ...
- 隐藏导航栏,偏移20PX
1:让ViewController在NavigationBar下面开始布局. automaticallyAdjustsScrollViewInsets作用 当Controller上存在唯一一个UISc ...
- Python 读取大文件的方式
对于读取容量小的文件,可以使用下面的方法: with open("path", "r") as f: f.read() 但是如果文件容量很大,高达几个G或者十几 ...
- bonjour browser 下载
在Mac 上叫 Bonjour Browser http://www.macupdate.com/app/mac/13388/bonjour-browser/download IOS 上的 app 叫 ...
- Spring Boot快速搭建Web工程
先想一下,正常我们想要创建一个web服务,首先需要下载tomcat,创建web工程,配置各种web.xml,引入spring的配置,各种配置文件一顿倒腾.....下载有了spring boot,你创建 ...
- 用 TensorFlow 实现 k-means 聚类代码解析
k-means 是聚类中比较简单的一种.用这个例子说一下感受一下 TensorFlow 的强大功能和语法. 一. TensorFlow 的安装 按照官网上的步骤一步一步来即可,我使用的是 virtua ...
- P1631 序列合并
P1631 序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2N2个和,求这N^2N2个和中最小的N个. 对于100%的数据中,满足1<=N<=100000. ...
- Java抽象工厂模式
Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...