ASP.NET MVC生成静态页面
1.先付上封装好生成静态页的原代码:
public class Common
{
#region 获取模板页的Html代码
/// <summary>
/// 获取页面的Html代码
/// </summary>
/// <param name="url">模板页面路径</param>
/// <param name="encoding">页面编码</param>
/// <returns></returns>
public static string GetHtml(string url, System.Text.Encoding encoding)
{
byte[] buf = new WebClient().DownloadData(url);
if (encoding != null)
{
return encoding.GetString(buf);
}
string html = System.Text.Encoding.UTF8.GetString(buf);
encoding = GetEncoding(html);
if (encoding == null || encoding == System.Text.Encoding.UTF8)
{
return html;
}
return encoding.GetString(buf);
} /// <summary>
/// 获取页面的编码
/// </summary>
/// <param name="html">Html源码</param>
/// <returns></returns>
public static System.Text.Encoding GetEncoding(string html)
{
string pattern = @"(?i)\bcharset=(?<charset>[-a-zA-Z_0-9]+)";
string charset = Regex.Match(html, pattern).Groups["charset"].Value;
try
{
return System.Text.Encoding.GetEncoding(charset);
}
catch (ArgumentException)
{
return null;
}
}
#endregion #region 用于生成Html静态页
/// <summary>
/// 创建静态文件
/// </summary>
/// <param name="result">Html代码</param>
/// <param name="createpath">生成路径</param>
/// <returns></returns>
public static bool CreateFileHtmlByTemp(string result, string createpath)
{
if (!string.IsNullOrEmpty(result))
{
if (string.IsNullOrEmpty(createpath))
{
createpath = "/default.html";
}
string filepath = createpath.Substring(createpath.LastIndexOf(@"\"));
createpath = createpath.Substring(, createpath.LastIndexOf(@"\"));
if (!Directory.Exists(createpath))
{
Directory.CreateDirectory(createpath);
}
createpath = createpath + filepath; try
{
FileStream fs2 = new FileStream(createpath, FileMode.Create);
StreamWriter sw = new StreamWriter(fs2, new System.Text.UTF8Encoding(false));//去除UTF-8 BOM
sw.Write(result);
sw.Close();
fs2.Close();
fs2.Dispose();
return true;
}
catch (Exception ex)
{
throw ex;
}
}
return false;
}
#endregion #region 调用静态模板,并且传递数据模型实体类 创建Html静态页
/// <summary>
/// 解析模板生成静态页
/// </summary>
/// <param name="temppath">模板地址</param>
/// <param name="path">静态页地址</param>
/// <param name="t">数据模型</param>
/// <returns></returns>
public static bool CreateStaticPage<T>(string temppath, string path, T t)
{
try
{
//获取模板Html
string TemplateContent = GetHtml(temppath, System.Text.Encoding.UTF8); //初始化结果
string result = string.Empty; //解析模板生成静态页Html代码
result = Razor.Parse(TemplateContent, t); //创建静态文件
return CreateFileHtmlByTemp(result, path);
}
catch (Exception e)
{
throw e;
}
}
#endregion
}
2.调用方法(创建一个多线程去执行,效果会更好):
//实例化调用方法
Task tk = new Task(CreateStaticHtml);
tk.Start();
//静态调用方法
Task.Factory.StartNew(() => CreateStaticHtml());
3.封装好的静态方法:
/// <summary>
/// 创建静态页面
/// </summary>
public void CreateStaticHtml()
{
using (BangLiEntities bangLi = new BangLiEntities())
{
View_Home view_Home = new View_Home();
view_Home.CommandAdExtendList = Dal.CommandAdDal.Instance(bangLi).GetInit().ToList();
view_Home.NewsList = bangLi.News.OrderByDescending(u => u.AddDateTime).Take().ToList();
view_Home.NewsExtendList = Dal.NewsDal.Instance(bangLi).GetInit().OrderByDescending(u => u.AddDateTime).Take().ToList();
view_Home.News = Dal.NewsDal.Instance(bangLi).GetInit().Where(u => u.Id == ).SingleOrDefault();
string TemplateContent = Common.GetHtml(Server.MapPath("/Views/SourceHtml/Home/Index.cshtml"), System.Text.Encoding.UTF8);
//初始化结果
string result = string.Empty;
//解析模板生成静态页Html代码
result = Razor.Parse(TemplateContent, view_Home);
//创建静态文件
Common.CreateFileHtmlByTemp(result, Server.MapPath("/Resource/Manage/Html/Home/Index.html"));
}
}
4.如首页执行时,可以在执行Action前去执行一个过滤器:
public class MyFirstHomeAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var context = filterContext.HttpContext;
context.Session["IsStaticHtml"] = false;
string path = context.Server.MapPath("/Resource/Manage/Html/Home/Index.html");
if (System.IO.File.Exists(path))
{
string html = System.IO.File.ReadAllText(path);
context.Response.Write(html);
context.Session["IsStaticHtml"] = true;
context.Response.End();
}
}
}
5.执行首页:
[MyFirstHome]
public ActionResult Index()
{
View_Home view_Home = null;
var IsStaticHtml = Convert.ToBoolean(Session["IsStaticHtml"]);
if (!IsStaticHtml)
{
view_Home = new View_Home();
using (BangLiEntities bangLi = new BangLiEntities())
{
view_Home.CommandAdExtendList = Dal.CommandAdDal.Instance(bangLi).GetInit().ToList();
view_Home.NewsExtendList = Dal.NewsDal.Instance(bangLi).GetInit().OrderByDescending(u => u.AddDateTime).Take().ToList(); }
return View(view_Home);
}
else
{
return null;
}
}
说明:可以让一个超链接或跳转地址直接跳转到一个html的静态页面,速度会更快;
ASP.NET MVC生成静态页面的更多相关文章
- Asp.net 生成静态页面
		http://www.cnblogs.com/tonycall/archive/2009/07/18/1526079.html Asp.net 生成静态页面(简单用法) 第一次发表,有什么错误,请大家 ... 
- asp.net配置全局应用程序类 巧妙达到定时生成静态页面
		//在项目里添加一个"全局应用程序类(Global Application Class)",在里面写这样的代码: public class Global : System.Web. ... 
- 学习笔记:Asp.Net MVC更新部分页面
		Asp.Net MVC 更新部分页面 设想我们有一篇文章下面的提交评论时如何只刷新评论内容部分, 方法一,利用ajax通过js代码实现. 方法二,利用Ajax.BeginForm()+部分视图实现. ... 
- .NET生成静态页面并分页
		因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页面并分页的程序,但缘于对.net的热爱,写了这个.net下的生成静态页面并分页的程序. 主要的原理就是替换模板里的特殊字符. 1.静态 ... 
- .net 生成 静态页面
		.net 生成 静态页面 <!--Main.Aspx--> <%@ page language="C#" %> <%@ import namespac ... 
- .NET生成静态页面例子
		主要做法如下: 1.创建网站,并创建一个模板页,template.htm 2.添加一个web窗体Default.aspx 3.在网站下新建文件夹htm,设置该文件夹的属性,确保该文件夹具有可写权限 详 ... 
- 三种C#.net生成静态页面的方法
		ASP.NET生成静态页面方法主要有三种 第一种方法:向服务器的动态页面发送请求,获取页面的html代码.这种方法缺点显而易见:速度慢.另外如果请求的动态页面有验证控件的话,返回的html页面却无 ... 
- ASP.NET MVC创建静态页
		1.在MVC下新建一个类:StaticPageHelper public class StaticPageHelper { /// <summary> /// 根据View视图生成静态页面 ... 
- 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数
		[问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ... 
随机推荐
- 动态规划:HDU1087-Super Jumping! Jumping! Jumping!(最大上升子序列和)
			Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ... 
- Linux命令之---mkdir
			命令简介 mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 命令格式 mkdir [选项] 目录...(这里可以是多个目 ... 
- HDU 2177 取(2堆)石子游戏
			取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ... 
- adaboost python实现小样例
			元算法是对其他算法进行组合的一种方式.单层决策树实际上是一个单节点的决策树.adaboost优点:泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整缺点:对离群点敏感适用数据类型:数值型和标称 ... 
- [python][django学习篇][15]博客侧栏--自定义模板标签
			我们的博客侧边栏有四项内容:最新文章.归档.分类和标签云. 这些内容相对比较固定,且在各个页面都会显示,如果像文章列表或者文章详情一样,从视图函数中获取然后传递给模板,则每个页面对应的视图函数里都要写 ... 
- c++ 中的slipt实现
			来自 http://www.cnblogs.com/dfcao/p/cpp-FAQ-split.html http://blog.diveinedu.com/%E4%B8%89%E7%A7%8D%E5 ... 
- Python 字典值相加
			#字典值相加 def union_dic(*objs): _keys = set(sum([obj.keys() for obj in objs],[])) _total = {} for _key ... 
- hdu6212[区间dp] 2017青岛ACM-ICPC网络赛
			原题: BZOJ1032 (原题数据有问题) /*hdu6212[区间dp] 2017青岛ACM-ICPC网络赛*/ #include <bits/stdc++.h> using name ... 
- Log4j官方文档翻译(八、文件输出)
			使用org.apache.log4j.FileAppender可以把日志写到文件中: FileAppender配置 immediateFlush 这个标志默认为true,是否每次有消息产生都自动flu ... 
- xml的并发
			网站整站的缓存方式都是依靠的DataSet的ReadXml和WriteXml的方式实现的,这种方式在访问量不是很大的网站中是一点问题都没有的(最大可承受的日IP估计在8000-15000左右),但是当 ... 
