当前位置: 首页 > 编程笔记 >

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

金瑞
2023-03-14
本文向大家介绍详解ASP.NET MVC 利用Razor引擎生成静态页,包括了详解ASP.NET MVC 利用Razor引擎生成静态页的使用技巧和注意事项,需要的朋友参考一下

最近在研究ASP.NET MVC生成静态页,那么今天也算个学习笔记吧!

实现原理及步骤:

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; }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 我有一个ASP。NET核心应用程序,使用身份进行用户管理。 我有一个,它准备通过smtp发送电子邮件以用于帐户激活目的: 然而,由于字符

  • 本文向大家介绍利用PHP生成静态html页面的原理,包括了利用PHP生成静态html页面的原理的使用技巧和注意事项,需要的朋友参考一下 前言 如果每次用户点击动态链接的时候都会对服务器发送数据查询的要求,对于一个访问量可能达百万千万级别的网站来说 这无疑是服务器一个大大的负担,所以把动态数据转换成静态html页面就成了节省人力物力的首选因为此前没有相应的经验,所以这篇文章和大家分享利用PHP生成静

  • 本文向大家介绍采用thinkphp自带方法生成静态html文件详解,包括了采用thinkphp自带方法生成静态html文件详解的使用技巧和注意事项,需要的朋友参考一下 thinkphp本身自带了一个有效的生成静态页的方法,(该方法在tp2.0的手册上有说明,3.0的手册上没有说明了,不过3.0方法还是存在的。) $this->buildHtml('静态文件', '静态路径','模板文件'); 稍微

  • 本文向大家介绍PHP静态成员变量和非静态成员变量详解,包括了PHP静态成员变量和非静态成员变量详解的使用技巧和注意事项,需要的朋友参考一下 数据成员可以分静态变量、非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于

  • 本文向大家介绍PHP页面静态化——纯静态与伪静态用法详解,包括了PHP页面静态化——纯静态与伪静态用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP页面静态化——纯静态与伪静态用法。分享给大家供大家参考,具体如下: 为什么要静态化页面?        当用户访问一个不经常更新的Web页面,PHP接到指示对php脚本文件进行解析,从数据库查询到该页面所需要的数据,然后对页面模板进

  • 静态网页生成器工具 JS 网页生成器: Metalsmith harp JS 博客网站生成器: hubpress.io Hexo.io 网站生成器列表: staticsitegenerators.net www.staticgen.com

  • 静态网页生成器 静态网页生成器, 是使用服务器端代码编写(如: ruby, php, python, nodeJS 等...), 用静态文本数据 + 模板, 生成从服务器发送到客户端的静态 HTML 文件. 综合学习: 静态网页生成器 [read]

  • 本文向大家介绍详解spring Boot 集成 Thymeleaf模板引擎实例,包括了详解spring Boot 集成 Thymeleaf模板引擎实例的使用技巧和注意事项,需要的朋友参考一下 今天学习了spring boot 集成Thymeleaf模板引擎。发现Thymeleaf功能确实很强大。记录于此,供自己以后使用。 Thymeleaf: Thymeleaf是一个java类库,他是一个xml/