• --:)欢迎访问锋网源码(:--
  • 首页
  • RSS订阅
  • 常用软件
  • 网页模板
  • 网站运作
  • 锋网学院
  • 繁體中文

  • 学院首页
  • 新闻资讯
  • 网站运营
  • 网站开发
  • 美工设计
  • 数据库类
  • 服务器类
  • 网络应用
  • 操作系统
  • 软件教学
编程开发   认证考试   网络安全   文章搜索: 高级搜索
会员登录/控制面版 您的位置: 学院首页 >> 网站开发 >> ASP教程 >> 文章内容
 

精彩推荐

 
 

本类推荐文章

  • ASP教程 插入Access记录后..
 
 

本类阅读排行

  • IIS的安装和配置全过程
  • ASP教程:制作登陆验证页面程..
  • www 56.com.cn 电影-www 56...
  • 分析器错误信息: 未能加载文..
  • “x365x”“纯爱社区”关键词..
  • ASP教程 插入Access记录后..
  • 动网论坛超级安装指南,新新人..
  • ASP乱码的解决方法 
  • 用ASP实现一个真正的注册页面..
  • Flash和ASP实现的用户登录/注..
  • 用ASP将数据读数导出EXCEL文..
  • 怎样在xp下配置iis
  • 去除空格的函数
  • 2000/XP IIS配置问题
  • ASP简介
  • ASP如何获取真实IP地址
  • LINE 的计数器源程序(附源代..
  • 用ASP发送邮件
  • 如何改进和维护你的留言板
  • 聊天室实现私聊(一)
 
 

ASP.NET MVC实现自己的一个视图引擎

  • 日期:2008-09-07     人气:     出处:     作者:
  • 字体大小:
  • 小
  • 中
  • 大

在ASP.NET MVC的一个开源项目MvcContrib中,为我们提供了几个视图引擎,例如NVelocity, Brail, NHaml, XSLT。那么如果我们想在ASP.NET MVC中实现我们自己的一个视图引擎,我们应该要怎么做呢?

我们知道呈现视图是在Controller中通过传递视图名和数据到RenderView()方法来实现的。好,我们就从这里下手。我们查看一下ASP.NET MVC的源代码,看看RenderView()这个方法是如何实现的:

protected virtual void RenderView(string viewName, string 
masterName, object viewData) {
           ViewContext viewContext = new ViewContext(
ControllerContext, viewName, masterName, viewData, TempData);
           ViewEngine.RenderView(viewContext);
}//

这是P2的源码,P3略有不同,原理差不多,从上面的代码我们可以看到,Controller中的RenderView()方法主要是将ControllerContext, viewName, masterName, viewData, TempData这一堆东西封装成ViewContext,然后把ViewContext传递给ViewEngine.RenderView(viewContext)。嗯,没错,我们这里要实现的就是ViewEngine的RenderView()方法。

ASP.NET MVC为我们提供了一个默认的视图引擎,这个视图引擎叫做:WebFormsViewEngine. 从名字就可以看出,这个视图引擎是使用ASP.NET web forms来呈现的。在这里,我们要实现的视图引擎所使用的模板用HTML文件吧,简单的模板示例代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=""http://www.w3.org/1999/xhtml"">
http://www.w3.org/1999/xhtml" >
<head>
    <title>自定义视图引擎示例</title>
</head>
<body>
    <h1>{$ViewData.Title}</h1>
    <p>{$ViewData.Message}</p>
    <p>The following fruit is part of a string array: {$ViewData.FruitStrings[1]}</p>
    <p>The following fruit is part of an object array: {$ViewData.FruitObjects[1].Name}</p>
    <p>Here's an undefined variable: {$UNDEFINED}</p>
</body>
< ml>

下面马上开始我们的实现。首先,毫无疑问的,我们要创建一个ViewEngine,就命名为 SimpleViewEngine 吧,注意哦,ViewEngine要实现IViewEngine接口:

public class SimpleViewEngine : IViewEngine
    {
        #region Private members 

        IViewLocator _viewLocator = null; 

        #endregion 

        #region IViewEngine Members : RenderView() 

        public void RenderView(ViewContext viewContext)
        {
            string viewLocation = ViewLocator.GetViewLocation
                                 (viewContext, viewContext.ViewName);
            if (string.IsNullOrEmpty(viewLocation))
            {
                throw new InvalidOperationException(string.Format
                    ("View {0} could not be found.",                  viewContext.ViewName));
            } 

            string viewPath = viewContext.HttpContext.Request.MapPath(viewLocation);
            string viewTemplate = File.ReadAllText(viewPath); 

            //以下为模板解析
            IRenderer renderer = new PrintRenderer();
            viewTemplate = renderer.Render(viewTemplate, viewContext); 

            viewContext.HttpContext.Response.Write(viewTemplate);
        } 

        #endregion 

        #region Public properties : ViewLocator 

        public IViewLocator ViewLocator
        {
            get
            {
                if (this._viewLocator == null)
                {
                    this._viewLocator = new SimpleViewLocator();
                }
                return this._viewLocator;
            }
            set
            {
                this._viewLocator = value;
            }
        } 

        #endregion
    }

相关文章
  • ASP.NET 1.1 没有出现在 IIS 6.0 中的 Web 服务扩展列..
  • ASP.net Server Application Unavailable
  • ASP.NET 2.0中CSS失效解决方案
  • JavaScript 调用 Asp.Net 服务器端的事件
  • ASP.NET AJAX无刷新验证用户名
  • ASP.net 页面被关闭后,服务器端是否仍然执行中?
  • 教程:Asp.net与Xml开发网络硬盘技术
  • ASP.NET最常见错误提示
  • ASP.NET程序防范SQL注入式攻击的方法
  • ASP.Net中Session失效的一种编程思路
相关软件

  • 网友评论:
  • 查看所有评论
  • 我要发表评论
 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 加入收藏 | 帮助中心 |

Copyright © 2006-2007 fwvv.net  程序支持:木翼  皖ICP备06004916号  

感谢:点击网络 联网科技 天盈信息 中国E速网 59互联  提供服务器及带宽赞助