ASP.NET MVC 利用Razor引擎生成静态页

来源:互联网 发布:mysql 拆分字符串函数 编辑:程序博客网 时间:2024/06/16 18:40

实现原理及步骤:

1.通过ViewEngines.Engines.FindView查找到对应的视图,如果是部分视图,则用:ViewEngines.Engines.FindPartialView;

2.设置上下文对象里的Model;

3.调用视图的Render()方法,将渲染结果保存到物理静态文件;

using System;using System.IO;using System.Text;using System.Web.Mvc;namespace Whir.Foundation.UI{    /// <summary>    ///     描述:静态页面生成帮助类    /// </summary>    public class StaticPageHelper    {        /// <summary>        ///     根据View视图生成静态页面        /// </summary>        /// <param name="htmlPath">存放静态页面所在绝对路径</param>        /// <param name="context">ControllerContext</param>        /// <param name="viewPath">视图名称</param>        /// <param name="masterName">模板视图名称</param>        /// <param name="model">参数实体模型</param>        /// <param name="html">返回信息</param>        /// <param name="isPartial">是否分布视图</param>        /// <returns>生成成功返回true,失败false</returns>        public static AjaxResult GenerateStaticPage(string viewPath,                                                    string htmlPath,                                                    ControllerContext context, object model = null, bool isPartial = false,                                                    string masterName = "")        {            var ajaxResult = new AjaxResult();            try            {                //创建存放静态页面目录                                            if (!Directory.Exists(Path.GetDirectoryName(htmlPath)))                {                    Directory.CreateDirectory(Path.GetDirectoryName(htmlPath));                }                //删除已有的静态页面                if (File.Exists(htmlPath))                {                    File.Delete(htmlPath);                }                ViewEngineResult result = null;                if (isPartial)                {                    result = ViewEngines.Engines.FindPartialView(context, viewPath);                }                else                {                    result = ViewEngines.Engines.FindView(context, viewPath, masterName);                }                if (model != null)                {                    context.Controller.ViewData.Model = model;                }                /*                 * 设置临时数据字典作为静态化标识                 * 可以在视图上使用TempData["IsStatic"]来控制某些元素显示。                 */                if (!context.Controller.TempData.ContainsKey("IsStatic"))                {                    context.Controller.TempData.Add("IsStatic", true);                }                if (result.View != null)                {                    using (var sw = new StringWriter())                    {                        var viewContext = new ViewContext(context,                                                          result.View,                                                          context.Controller.ViewData,                                                          context.Controller.TempData, sw);                        result.View.Render(viewContext, sw);                        string body = sw.ToString();                        File.WriteAllText(htmlPath, body, Encoding.UTF8);                        ajaxResult.IsSucess = true;                        ajaxResult.Body = "存放路径:" + htmlPath;                    }                }                else                {                    ajaxResult.IsSucess = false;                    ajaxResult.Body = "生成静态页面失败!未找到视图!";                }            }            catch (IOException ex)            {                ajaxResult.IsSucess = false;                ajaxResult.Body = ex.Message;            }            catch (Exception ex)            {                ajaxResult.IsSucess = false;                ajaxResult.Body = ex.Message;            }            return ajaxResult;        }    }}

AjaxResult 是自己封装的一个类,您也可以用自己封装的类代替。

    public class AjaxResult
    {

        public bool IsSucess { get; set; }
        public string Body { get; set; }

    }



0 0
原创粉丝点击