詳解ASP.NET MVC 利用Razor引擎生成靜態(tài)頁
最近在研究ASP.NET MVC生成靜態(tài)頁,那么今天也算個(gè)學(xué)習(xí)筆記吧!
實(shí)現(xiàn)原理及步驟:
1.通過ViewEngines.Engines.FindView查找到對(duì)應(yīng)的視圖,如果是部分視圖,則用:ViewEngines.Engines.FindPartialView;
2.設(shè)置上下文對(duì)象里的Model;
3.調(diào)用視圖的Render()方法,將渲染結(jié)果保存到物理靜態(tài)文件;
using System;
using System.IO;
using System.Text;
using System.Web.Mvc;
namespace Whir.Foundation.UI
{
/// <summary>
/// 描述:靜態(tài)頁面生成幫助類
/// </summary>
public class StaticPageHelper
{
/// <summary>
/// 根據(jù)View視圖生成靜態(tài)頁面
/// </summary>
/// <param name="htmlPath">存放靜態(tài)頁面所在絕對(duì)路徑</param>
/// <param name="context">ControllerContext</param>
/// <param name="viewPath">視圖名稱</param>
/// <param name="masterName">模板視圖名稱</param>
/// <param name="model">參數(shù)實(shí)體模型</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
{
//創(chuàng)建存放靜態(tài)頁面目錄
if (!Directory.Exists(Path.GetDirectoryName(htmlPath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(htmlPath));
}
//刪除已有的靜態(tài)頁面
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;
}
/*
* 設(shè)置臨時(shí)數(shù)據(jù)字典作為靜態(tài)化標(biāo)識(shí)
* 可以在視圖上使用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 = "生成靜態(tài)頁面失??!未找到視圖!";
}
}
catch (IOException ex)
{
ajaxResult.IsSucess = false;
ajaxResult.Body = ex.Message;
}
catch (Exception ex)
{
ajaxResult.IsSucess = false;
ajaxResult.Body = ex.Message;
}
return ajaxResult;
}
}
}
AjaxResult 是自己封裝的一個(gè)類,您也可以用自己封裝的類代替。
public class AjaxResult
{
public bool IsSucess { get; set; }
public string Body { get; set; }
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解ASP.NET Razor 語法
- ASP.NET MVC重寫RazorViewEngine實(shí)現(xiàn)多主題切換
- ASP.NET MVC4 Razor模板簡易分頁效果
- ASP.NET Razor模板引擎中輸出Html的兩種方式
- ASP.NET MVC使用RazorEngine解析模板生成靜態(tài)頁
- asp.net模板引擎Razor調(diào)用外部方法用法實(shí)例
- asp.net模板引擎Razor中cacheName的問題分析
- 使用Asp.net Mvc3 Razor視圖方式擴(kuò)展JQuery UI Widgets方法介紹
- 詳細(xì)分析ASP.NET Razor之C# 變量
相關(guān)文章
Asp.net利用JQuery彈出層加載數(shù)據(jù)代碼
最近看QQ空間里面的投票功能很使用。點(diǎn)擊一個(gè)鏈接就彈出一個(gè)層,然后再加載一些投票信息,旁邊的區(qū)域變成灰色不可用狀態(tài)。其實(shí)這不算什么高深的技術(shù),只要在ASP.NET中利用JQuery結(jié)合一般處理程序ASHX即可搞定了。2009-11-11
asp.net SqlDataAdapter對(duì)象使用札記
如果 DataAdapter 遇到多個(gè)結(jié)果集,它將在 DataSet 中創(chuàng)建多個(gè)表。將向這些表提供遞增的默認(rèn)名稱 TableN,以表示 Table0 的“Table”為第一個(gè)表名。2009-04-04
讓GridView只顯示特定用戶的數(shù)據(jù)的方法
GridView 只顯示特定用戶的數(shù)據(jù)2008-10-10
ASP.NET?Core獲取正確查詢字符串參數(shù)示例
這篇文章主要為大家介紹了ASP.NET?Core正確獲取查詢字符串參數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
asp.net 關(guān)于==?:和if()else()條件判斷等效例子
關(guān)于==?:和if()else() 等效例子2010-03-03

