利用Razor引擎產生靜態頁(ASP.NET MVC)執行個體詳解

來源:互聯網
上載者:User
最近在研究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; }  }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.