//自定义视图引擎的实质是把数据模型(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);
}
}

最新文章

  1. href="javascript:function()" 和onclick的区别
  2. golang使用 mongo
  3. PHP路径常量和函数解释
  4. [iOS] 建立与使用Framework
  5. LeetCode "Binary Tree Level Order Traversal II" using DFS
  6. oracle 内外连接,左连接,右连接 区别
  7. 九度OJ 1076 N的阶乘 -- 大数运算
  8. php中mysqli 处理查询结果集的几个方法
  9. Tarjan系列算法总结(hdu 1827,4612,4587,4005)
  10. modelsim使用命令
  11. oc学习之路----内存管理
  12. 项目实战5—企业级缓存系统varnish应用与实战
  13. IntelliJ IDEA 14.0.3 实战搭建Spring+SpringMVC+MyBatis组合框架
  14. git中利用rebase来压缩多次提交 ----- 原文:https://blog.csdn.net/itfootball/article/details/44154121
  15. arrow function
  16. Linux安装R记要
  17. webpack 自动发现 entry 的配置和引用方式
  18. 「Vue」vue生命周期
  19. Struct2笔记②--完善登陆代码
  20. ASP.NET2.0 Newtonsoft.Json 操作类分享

热门文章

  1. git简易使用指南
  2. World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)(转)
  3. CUDA中记录执行时间-GPU端
  4. JS时间格式和时间戳的相互转换
  5. Binary Agents-freecodecamp算法题目
  6. 详解----memcache服务端与客户端
  7. 通过rsync+inotify实现数据实时备份
  8. mybatis的优缺点及应用场合
  9. JZOJ 4272. 【NOIP2015模拟10.28B组】序章-弗兰德的秘密
  10. python3.7 sys模块