mvc-自定义视图引擎
2024-09-16 00:48:00
//自定义视图引擎的实质是把数据模型(moudle)和模板(View)转换成html页面,输出到客户端
public class MyView:IView
{
string _viewPath;
public MyView(string viewPath)
{
this._viewPath = viewPath;
} public void Render(ViewContext viewContext, System.IO.TextWriter writer)
{
// 获取视图文件的原始内容
string rawContents = File.ReadAllText(_viewPath); // 根据自定义的规则解析原始内容
string parsedContents = Parse(rawContents, viewContext.ViewData); // 呈现出解析后的内容
writer.Write(parsedContents);
} private string Parse(string contents,ViewDataDictionary viewData)
{
// 对 {##} 之间的内容作解析
return Regex.Replace
(
contents,
@"\{#(.+)#\}",
p => GetMatch(p, viewData)
);
}
protected virtual string GetMatch(Match m, ViewDataDictionary viewData)
{
if (m.Success)
{
// 获取匹配后的结果,即 ViewData 中的 key 值,并根据这个 key 值返回 ViewData 中对应的 value
string key = m.Result("$1");
if (viewData.ContainsKey(key))
{
return viewData[key].ToString();
}
} return string.Empty;
}
} public class MyViewEngine:VirtualPathProviderViewEngine
{
public MyViewEngine()
{
//自定义View路径格式
base.ViewLocationFormats = new string[] {
"~/Views/{1}/{0}.my", "~/Views/Shared/{0}.my"
};
} protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
return this.CreateView(controllerContext, partialPath, string.Empty);
}
//把请求转换成
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
var physicalPath = controllerContext.HttpContext.Server.MapPath(viewPath); return new MyView(physicalPath);
}
}
最新文章
- href=";javascript:function()"; 和onclick的区别
- golang使用 mongo
- PHP路径常量和函数解释
- [iOS] 建立与使用Framework
- LeetCode ";Binary Tree Level Order Traversal II"; using DFS
- oracle 内外连接,左连接,右连接 区别
- 九度OJ 1076 N的阶乘 -- 大数运算
- php中mysqli 处理查询结果集的几个方法
- Tarjan系列算法总结(hdu 1827,4612,4587,4005)
- modelsim使用命令
- oc学习之路----内存管理
- 项目实战5—企业级缓存系统varnish应用与实战
- IntelliJ IDEA 14.0.3 实战搭建Spring+SpringMVC+MyBatis组合框架
- git中利用rebase来压缩多次提交 ----- 原文:https://blog.csdn.net/itfootball/article/details/44154121
- arrow function
- Linux安装R记要
- webpack 自动发现 entry 的配置和引用方式
- 「Vue」vue生命周期
- Struct2笔记②--完善登陆代码
- ASP.NET2.0 Newtonsoft.Json 操作类分享