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('@ ...
随机推荐
- [Uva623]500!(高精)
Description 求N! \(N \leq 1000\) Sample Input 10 30 50 100 Sample Output 10! 3628800 30! 265252859812 ...
- P1616 疯狂的采药【模板】
此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师. ...
- HDU 4628 Pieces(状态压缩+记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=4628 题意:给个字符窜,每步都可以删除一个字符窜,问最少用多少步可以删除一个字符窜分析:状态压缩+记忆化搜索 ...
- [转]using components in Cakephp 2+ Shell
<?php App::uses('AppShell', 'Console/Command'); App::uses('ComponentCollection', 'Controller'); A ...
- 基础_String
String str1="hello"; String str2="hello"; String str3="hello"; String ...
- luogu2093 [国家集训队]JZPFAR
题面不符?-- #include <algorithm> #include <iostream> #include <cstdio> using namespace ...
- loj2035 「SDOI2016」征途
学了斜率优化这题就能一气呵成地做出来啦qwqqwq #include <iostream> #include <cstdio> using namespace std; typ ...
- 【Triangle 】cpp
题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...
- IOS开发学习笔记017-第一个IOS应用
第一个IOS应用程序,就从最简单的开始吧. 1.先了解一下开发环境,Xcode的相关组成 2.还有模拟器 3.运行与停止按钮 4.新建一个工程 5.看看main函数里都有啥 6.现在来添加一个控件 1 ...
- adb命令模拟按键事件
//这条命令相当于按了设备的Backkey键 adb shell input keyevent 4 //可以解锁屏幕 adb shell input keyevent 82 //在屏幕上做划屏操作, ...