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

发布时间 - 2026-01-11 00:25:49    点击率:

最近在研究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; }
  }

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


# mvc  # 生成静态页面  # mvc4  # 生成静态页  # 详解ASP.NET Razor 语法  # ASP.NET MVC重写RazorViewEngine实现多主题切换  # ASP.NET MVC4 Razor模板简易分页效果  # ASP.NET Razor模板引擎中输出Html的两种方式  # ASP.NET MVC使用RazorEngine解析模板生成静态页  # asp.net模板引擎Razor调用外部方法用法实例  # asp.net模板引擎Razor中cacheName的问题分析  # 使用Asp.net Mvc3 Razor视图方式扩展JQuery UI Widgets方法介绍  # 详细分析ASP.NET Razor之C# 变量  # 可以用  # 也算  # 您也  # 大家多多  # 则用  # 未找到  # 学习笔记  # summary  # gt  # public  # StaticPageHelper  # lt  # namespace 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何在建站主机中优化服务器配置?  三星、SK海力士获美批准:可向中国出口芯片制造设备  免费视频制作网站,更新又快又好的免费电影网站?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  千库网官网入口推荐 千库网设计创意平台入口  在线制作视频网站免费,都有哪些好的动漫网站?  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Android GridView 滑动条设置一直显示状态(推荐)  JS去除重复并统计数量的实现方法  如何在Windows环境下新建FTP站点并设置权限?  如何快速搭建FTP站点实现文件共享?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel PHP版本要求一览_Laravel各版本环境要求对照  js实现点击每个li节点,都弹出其文本值及修改  Laravel如何实现用户密码重置功能?(完整流程代码)  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Laravel如何生成URL和重定向?(路由助手函数)  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  大同网页,大同瑞慈医院官网?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  JavaScript Ajax实现异步通信  lovemo网页版地址 lovemo官网手机登录  Laravel如何使用查询构建器?(Query Builder高级用法)  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  如何快速上传自定义模板至建站之星?  如何在建站之星网店版论坛获取技术支持?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何快速打造个性化非模板自助建站?  如何自定义建站之星模板颜色并下载新样式?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  制作旅游网站html,怎样注册旅游网站?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】