最近在研究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
相关文章:
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
详解jQuery停止动画——stop()方法的使用
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何高效搭建专业期货交易平台网站?
Bpmn 2.0的XML文件怎么画流程图
如何在自有机房高效搭建专业网站?
专业网站建设制作报价,网页设计制作要考什么证?
南宁网站建设制作定制,南宁网站建设可以定制吗?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
贸易公司网站制作流程,出口贸易网站设计怎么做?
如何配置IIS站点权限与局域网访问?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
建站之星如何优化SEO以实现高效排名?
建站主机空间推荐 高性价比配置与快速部署方案解析
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
c++ stringstream用法详解_c++字符串与数字转换利器
网站制作说明怎么写,简述网页设计的流程并说明原因?
做企业网站制作流程,企业网站制作基本流程有哪些?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
网站按钮制作软件,如何实现网页中按钮的自动点击?
外贸公司网站制作哪家好,maersk船公司官网?
如何快速完成中国万网建站详细流程?
个人网站制作流程图片大全,个人网站如何注销?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何在阿里云完成域名注册与建站?
建站之星好吗?新手能否轻松上手建站?
制作旅游网站html,怎样注册旅游网站?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
招商网站制作流程,网站招商广告语?
建站之星多图banner生成与模板自定义指南
如何确认建站备案号应放置的具体位置?
重庆市网站制作公司,重庆招聘网站哪个好?
网站专业制作公司有哪些,做一个公司网站要多少钱?
公众号网站制作网页,微信公众号怎么制作?
如何用AWS免费套餐快速搭建高效网站?
建站之星安装失败:服务器环境不兼容?
如何自定义建站之星模板颜色并下载新样式?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
宝塔新建站点为何无法访问?如何排查?
如何在腾讯云服务器上快速搭建个人网站?
高端云建站费用究竟需要多少预算?
如何用西部建站助手快速创建专业网站?
教学网站制作软件,学习*后期制作的网站有哪些?
青岛网站建设如何选择本地服务器?
如何在阿里云高效完成企业建站全流程?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何获取上海专业网站定制建站电话?
*请认真填写需求信息,我们会在24小时内与您取得联系。