婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > ASP.NET MVC使用RazorEngine解析模板生成靜態(tài)頁

ASP.NET MVC使用RazorEngine解析模板生成靜態(tài)頁

熱門標簽:400電話辦理怎么樣 臨沂智能電話機器人加盟 西寧呼叫中心外呼系統(tǒng)線路商 百應電話機器人外呼系統(tǒng) 外呼電話機器人成本 地圖標注軟件免費下載 網(wǎng)絡電話外呼系統(tǒng)上海 聯(lián)通官網(wǎng)400電話辦理 蘇州如何辦理400電話

簡述

      Razor是ASP.NET MVC 3中新加入的技術,以作為ASPX引擎的一個新的替代項。在早期的MVC版本中默認使用的是ASPX模板引擎,Razor在語法上的確不錯,用起來非常方便,簡潔的語法與.NET Framework 結合,廣泛應用于ASP.NET MVC 項目。

      我們在很多項目開發(fā)中會常常用到頁面靜態(tài)化,頁面靜態(tài)化有許多方式,最常見的就是類似很多PHP CMS種使用的 標簽替換的方式(如:帝國CMS、EcShop等),還有很多都是偽靜態(tài),偽靜態(tài)我們就不做過多解釋,通過路由或Url重寫來實現(xiàn)就可以了。Razor為我們提供了更加方便的模板解析方式,任何東西都是兩方面的,技術也是如此,Razor解析模板雖然更加方便、簡潔,但是對于模板制作人員來說也是有一定的技術要求,或者對于開發(fā)一套模板制作功能來說,考慮的要更多一些。我們不再去探究這些問題,我們更注重哪種技術更容易、更方便、更好的滿足我們項目的需求。

如何使用RazorEngine

       今天來簡單介紹一下如何使用RazorEngine解析模板生成靜態(tài)頁面,RazorEngine它是基于微軟的Razor之上,包裝而成的一個可以獨立使用的模板引擎。也就是說,保留了Razor的模板功能,但是使得Razor脫離于Asp.net MVC,能夠在其它應用環(huán)境下使用,項目地址:https://github.com/Antaris/RazorEngine

首先我們?nèi)odeplex上下兩個需要的dll http://razorengine.codeplex.com

      看到網(wǎng)上很多介紹RazorEngine的基礎用法的,講解的都比較詳細,對于RazorEngine運行原理很清晰,我們在這里就不重復介紹了。寫這篇文章是對于很多新手同學來說比較喜歡“拿來主義”,基本的用法原理都能看懂,但是如何應用到項目中還是有些不是很清晰,我們只講講如何在項目中運用。

本文分為兩部分:第一個部分,基本的單數(shù)據(jù)模型模板解析;第二部分,面向接口的多數(shù)據(jù)模型模板解析

第一個部分 基本的單數(shù)據(jù)模型模板解析

一、我們創(chuàng)建一個MVC項目,并且添加上面的兩個DLL引用,然后我們新建一個簡單的文章類

public class Articles
 {
 /// summary>
 /// 文章ID
 /// /summary>
 public int Id { get; set; }
 /// summary>
 /// 文章標題
 /// /summary>
 public string Title { get; set; }
 /// summary>
 /// 文章內(nèi)容
 /// /summary>
 public string Content { get; set; }
 /// summary>
 /// 作者
 /// /summary>
 public string Author { get; set; }
 /// summary>
 /// 發(fā)布時間
 /// /summary>
 public DateTime CreateDate { get; set; }
 }

二、我們新建一個Razor的Html模板

!DOCTYPE html>
html xmlns="http://www.w3.org/1999/xhtml">
head>
meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 title>@Model.Title/title>
/head>
body>
 h1>@Model.Title/h1>
 p>作者:@Model.Author - 發(fā)布時間:@Model.CreateDate/p>
 p>@Raw(Model.Content)/p>
/body>
/html>

說明:Model就是我們的文章實體類  在MVC的試圖頁cshtml中 我們一般都是在控制器里傳遞這個實體類 然后在視圖頁中 @model Models.Articles 來接收這個實體類 然后通過“@Model.”來輸出內(nèi)容,在Razor模板中是一樣的,只是不用@model Models.Articles 來接收了,其它的語法跟在.cshtml試圖頁中是一樣的,這么說多余了,因為寫法不一樣他就不是Razor了

三、我們寫一個方法來獲取模板頁的Html代碼

 /// summary>
 /// 獲取頁面的Html代碼
 /// /summary>
 /// param name="url">模板頁面路徑/param>
 /// param name="encoding">頁面編碼/param>
 /// returns>/returns>
 public 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 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; }
 }

四、我們寫一個方法 用于生成Html靜態(tài)頁

/// summary>
 /// 創(chuàng)建靜態(tài)文件
 /// /summary>
 /// param name="result">Html代碼/param>
 /// param name="createpath">生成路徑/param>
 /// returns>/returns>
 public 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(0, 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 { return false; }
  }
  return false;
 }

五、我們來寫個方法調(diào)用靜態(tài)模板,并且傳遞數(shù)據(jù)模型實體類 創(chuàng)建Html靜態(tài)頁

/// summary>
 /// 解析模板生成靜態(tài)頁
 /// /summary>
 /// param name="temppath">模板地址/param>
 /// param name="path">靜態(tài)頁地址/param>
 /// param name="t">數(shù)據(jù)模型/param>
 /// returns>/returns>
 public bool CreateStaticPage(string temppath, string path, RazorEngineTemplates.Models.Articles t)
 {
  try
  {
  //獲取模板Html
  string TemplateContent = GetHtml(temppath, System.Text.Encoding.UTF8);

  //初始化結果
  string result = string.Empty;

  //解析模板生成靜態(tài)頁Html代碼
  result = Razor.Parse(TemplateContent, t);

  //創(chuàng)建靜態(tài)文件
  return CreateFileHtmlByTemp(result, path);
  }
  catch (Exception e)
  {
  throw e;
  }
 }

好了,大功告成,是不是很簡單。

這里只是一個很簡單的應用,沒有讀取數(shù)據(jù),也沒有列表,只有一個文章數(shù)據(jù)模型,下一部分我們將介紹 多模型模板解析,因為是多模型 所以 生成靜態(tài)頁面的時候 就不是傳遞一個具體模型實體類 我們會用到 反射,通過反射模型屬性 獲取數(shù)據(jù),有不熟悉反射的可以提前研究一下,也可以直接看下一部分的反射代碼也很簡單的。

第二部分 面向接口的多數(shù)據(jù)模型模板解析

這一部分,我們介紹使用接口來解析模板,包括列表等多種模型解析,用到了Spring注入和反射還有接口等,有不熟悉的可以百度搜一下或者評論留言。

我們接著上面的示例,我們新建兩個類庫 一個是存放數(shù)據(jù)模型的 我們叫Domain;另外一個是接口和實現(xiàn)類的 我們叫Service,然后我們添加他們之間的引用

一、我們在Domain下創(chuàng)建幾個測試類

Articles - 文章測試類

Company - 公司測試類

Column - 欄目測試類

TemplateView - 模型解析類(這個是不是比較弱智?我也沒深入研究多個模型怎么反射出來 所以 我加了這么個算是公用的類 沒有對應的數(shù)據(jù)表 只是解析模板的時候 作為中間件用用)

public class Articles
 {
 /// summary>
 /// 文章ID
 /// /summary>
 public int Id { get; set; }
 /// summary>
 /// 文章標題
 /// /summary>
 public string Title { get; set; }
 /// summary>
 /// 文章內(nèi)容
 /// /summary>
 public string Content { get; set; }
 /// summary>
 /// 作者
 /// /summary>
 public string Author { get; set; }
 /// summary>
 /// 發(fā)布時間
 /// /summary>
 public DateTime CreateDate { get; set; }
 }
  public class Company
 {
 /// summary>
 /// 公司Id
 /// /summary>
 public int Id { get; set; }
 /// summary>
 /// 公司名稱
 /// /summary>
 public string CompanyName { get; set; }
 /// summary>
 /// 公司電話
 /// /summary>
 public string CompanyTel { get; set; }
 /// summary>
 /// 聯(lián)系人
 /// /summary>
 public string ContectUser { get; set; }
 /// summary>
 /// 創(chuàng)建時間
 /// /summary>
 public DateTime CreateDate { get; set; }
 }
   public class Column
 {
 /// summary>
 /// 欄目ID
 /// /summary>
 public int Id { get; set; }
 /// summary>
 /// 欄目名稱
 /// /summary>
 public string Title { get; set; }
 /// summary>
 /// 文章列表
 /// /summary>

 public virtual ICollectionArticles> Articles { get; set; }
 }
   public class TemplateView
 {
 /// summary>
 /// ID
 /// /summary>
 public int Id { get; set; }
 /// summary>
 /// 標題
 /// /summary>
 public string Title { get; set; }
 /// summary>
 /// 內(nèi)容
 /// /summary>
 public string Content { get; set; }
 /// summary>
 /// 作者
 /// /summary>
 public string Author { get; set; }
 /// summary>
 /// 時間
 /// /summary>
 public DateTime CreateDate { get; set; } 
 /// summary>
 /// 公司名稱
 /// /summary>
 public string CompanyName { get; set; }
 /// summary>
 /// 公司電話
 /// /summary>
 public string CompanyTel { get; set; }
 /// summary>
 /// 聯(lián)系人
 /// /summary>
 public string ContectUser { get; set; }
 /// summary>
 /// 文章列表
 /// /summary>
 public virtual ICollectionArticles> Articles { get; set; }
 }

二、我們在Service下創(chuàng)建一個基礎操作接口以及其實現(xiàn)類(里面的很多方法 比如:獲取頁面的Html代碼、獲取頁面的編碼以及創(chuàng)建靜態(tài)文件等 是沒有必要寫在接口的 這個可以寫到公用的類庫里,因為這里就用到這么幾個方法 所以我沒有加公用類庫 就直接寫在這里面了)

/// summary>
 /// 基礎操作接口
 /// /summary>
 /// typeparam name="T">/typeparam>
 public interface IRepositoryT> where T : class
 {
 /// summary>
 /// 解析模板生成靜態(tài)頁
 /// /summary>
 /// param name="temppath">模板地址/param>
 /// param name="path">靜態(tài)頁地址/param>
 /// param name="t">數(shù)據(jù)模型/param>
 /// returns>/returns>
 bool CreateStaticPage(string temppath, string path, T t); 

 /// summary>
 /// 獲取頁面的Html代碼
 /// /summary>
 /// param name="url">模板頁面路徑/param>
 /// param name="encoding">頁面編碼/param>
 /// returns>/returns>
 string GetHtml(string url, System.Text.Encoding encoding);

 /// summary>
 /// 獲取頁面的編碼
 /// /summary>
 /// param name="html">Html源碼/param>
 /// returns>/returns>
 System.Text.Encoding GetEncoding(string html);

 /// summary>
 /// 創(chuàng)建靜態(tài)文件
 /// /summary>
 /// param name="result">Html代碼/param>
 /// param name="createpath">生成路徑/param>
 /// returns>/returns>
 bool CreateFileHtmlByTemp(string result, string createpath);
 }
/// summary>
 /// 基礎接口實現(xiàn)類
 /// /summary>
 /// typeparam name="T">/typeparam>
 public abstract class RepositoryBaseT> : IRepositoryT> where T : class
 {
 /// summary>
 /// 解析模板生成靜態(tài)頁
 /// /summary>
 /// param name="temppath">模板地址/param>
 /// param name="path">靜態(tài)頁地址/param>
 /// param name="t">數(shù)據(jù)模型/param>
 /// returns>/returns>
 public bool CreateStaticPage(string temppath, string path, T t)
 {
  try
  {
  //實例化模型
  var Entity = new Domain.TemplateView();

  //獲取模板Html
  string TemplateContent = GetHtml(temppath, System.Text.Encoding.UTF8);
  //初始化結果
  string result = "";

  //反射賦值
  Type typeT = t.GetType();
  Type typeEn = Entity.GetType();

  System.Reflection.PropertyInfo[] propertyinfosT = typeT.GetProperties();

  foreach (System.Reflection.PropertyInfo propertyinfoT in propertyinfosT)
  {
   System.Reflection.PropertyInfo propertyinfoEn = typeEn.GetProperty(propertyinfoT.Name);
   if (propertyinfoEn != null  propertyinfoT.GetValue(t, null) != null)
   {
   propertyinfoEn.SetValue(Entity, propertyinfoT.GetValue(t, null), null);
   }
  }

  //很多時候 我們并沒有創(chuàng)建復雜的主外鍵關系 例如欄目下的文章 我們僅僅是在文章表中添加了一個所屬欄目ID的字段
  //并沒有創(chuàng)建關聯(lián) 這種情況下 我們直接獲取欄目的時候 是獲取不到文章列表的
  //包括很多自定義的模型和字段 比如 文章的內(nèi)容 可能不跟文章一個表 而是一個單獨的大數(shù)據(jù)字段表 這種情況下 我們的
  //TemplateView.Content就需要單獨獲取一下另一個數(shù)據(jù)模型里的 這個文章的內(nèi)容 這種時候 我們可以在這里重新給他賦值

  //如 傳入的模型是 文章
  //if(t is Domain.Articles)
  //{
  // Entity.Content= 查詢大數(shù)據(jù)字段表中這篇文章的內(nèi)容;
   
  //}

  result = Razor.Parse(TemplateContent, Entity);

  return CreateFileHtmlByTemp(result, path);
  }
  catch (Exception e)
  {
  throw e;
  }
 }

 /// summary>
 /// 獲取頁面的Html代碼
 /// /summary>
 /// param name="url">模板頁面路徑/param>
 /// param name="encoding">頁面編碼/param>
 /// returns>/returns>
 public 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 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; }
 }

 /// summary>
 /// 創(chuàng)建靜態(tài)文件
 /// /summary>
 /// param name="result">Html代碼/param>
 /// param name="createpath">生成路徑/param>
 /// returns>/returns>
 public 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(0, 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 { return false; }
  }
  return false;
 }
 }

三、我們分別創(chuàng)建 文章管理、公司管理、欄目管理的接口和實現(xiàn)類 并且他們都集成基礎操作

   /// summary>
 /// 文章管理
 /// /summary>
   public interface IArticleManage:IRepositoryDomain.Articles>
 {
 }
 public class ArticleManage:RepositoryBaseDomain.Articles>,IArticleManage
 {
 }

  /// summary>
 /// 公司管理
 /// /summary>
 public interface ICompanyManage:IRepositoryDomain.Company>
 {
 }
  public class CompanyManage:RepositoryBaseDomain.Company>,ICompanyManage
 {
 }

  //欄目管理
 public interface IColumnManage:IRepositoryDomain.Column>
 {
 }
  public class ColumnManage:RepositoryBaseDomain.Column>,IColumnManage
 {
 }

四、注入Xml

?xml version="1.0" encoding="utf-8" ?>
objects xmlns="http://www.springframework.net">
 description>Spring注入Service,容器指向本層層封裝的接口/description>
 object id="Service.ArticleManage" type="Service.ArticleManage,Service" singleton="false">
 /object>
 object id="Service.ColumnManage" type="Service.ColumnManage,Service" singleton="false">
 /object>
 object id="Service.CompanyManage" type="Service.CompanyManage,Service" singleton="false">
 /object>
/objects>

五、我們分別初始化一個文章類、一個公司類(沒有管理數(shù)據(jù)表,它下面沒有文章列表 欄目模型我就不初始化了,怎么輸出列表 大家可以參考下 欄目模板)

public class HomeController : Controller
 {
 /// summary>
 /// 聲明一下注入接口
 /// /summary>
 public IArticleManage ArticleManage = Spring.Context.Support.ContextRegistry.GetContext().GetObject("Service.ArticleManage") as IArticleManage;
 public ICompanyManage CompanyManage = Spring.Context.Support.ContextRegistry.GetContext().GetObject("Service.CompanyManage") as ICompanyManage;
 public IColumnManage ColumnManage = Spring.Context.Support.ContextRegistry.GetContext().GetObject("Service.ColumnManage") as IColumnManage;


 public ActionResult Index()
 {
  //初始化一個文章數(shù)據(jù)模型
  var entityArticle = new Domain.Articles() { Id = 1, Title = "這里是文章標題", Content = "span style=\"color:red;\">這里是文章內(nèi)容/span>", Author = "張三", CreateDate = DateTime.Now };

  //初始化一個公司數(shù)據(jù)模型
  var entityCompany = new Domain.Company() { Id = 1, CompanyName = "這里是公司名稱", CompanyTel = "公司電話", ContectUser = "張三", CreateDate = DateTime.Now };

  //調(diào)用方法生成靜態(tài)頁面
  ArticleManage.CreateStaticPage(Server.MapPath("/Templates/Temp_article.html"), Server.MapPath("/Pages/news/" + DateTime.Now.ToString("yyyyMMddHHmmss") + "1.html"), entityArticle);
  CompanyManage.CreateStaticPage(Server.MapPath("/Templates/Temp_company.html"), Server.MapPath("/Pages/news/" + DateTime.Now.ToString("yyyyMMddHHmmss") + "2.html"), entityCompany);

  return View();
 }

 public ActionResult About()
 {
  ViewBag.Message = "Your application description page.";

  return View();
 }

 public ActionResult Contact()
 {
  ViewBag.Message = "Your contact page.";

  return View();
 }
 
 }

六、這是測試的簡單的文章模板、公司模板和欄目模板

!DOCTYPE html>
html xmlns="http://www.w3.org/1999/xhtml">
head>
 meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 title>@Model.Title/title>
/head>
body>
 h1>@Model.Title/h1>
 p>作者:@Model.Author - 發(fā)布時間:@Model.CreateDate/p>
 p>@Raw(Model.Content)/p>
/body>
/html>

!DOCTYPE html>
html xmlns="http://www.w3.org/1999/xhtml">
head>
meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 title>/title>
/head>
body>
 p>公司名稱:@Model.CompanyName/p>
 p>公司電話:@Model.CompanyTel/p>
 p>聯(lián)系人:@Model.ContectUser/p>
 p>創(chuàng)建時間:@Model.CreateDate/p>
/body>
/html>

!DOCTYPE html>
html xmlns="http://www.w3.org/1999/xhtml">
head>
meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 title>/title>
/head>
body>
 p>欄目標題: @Model.Title/p>
 p>
 文章列表
 ul>
  @foreach(var item in @Model.Articles)
  {
  li>
  a href="">
   span>@item.Title/span>
   span>@item.Author/span>
   span>@item.CreateDate/span>
  /a>
  /li>
  }
 /ul>
 /p>
/body>
/html>

我們運行一下,大功告成~~~

        

怎么排序?怎么獲取前幾條?怎么格式化日期時間?怎么分頁?

這可是Razor啊,這都不需要再多講了吧,簡單一說,如果你傳入數(shù)據(jù)前沒有事先排序或者獲取前幾條,這些操作要做模板里操作 那跟在.cshtml里基本是一樣的

@foreach(var item in @Model.ListColumn)
{

 div >
@if (@item.LinkUrl==null)
 {
 ul>
@foreach(var article in @item.COM_ARTICLE.Take(15).OrderByDescending(p=>p.UpDateDate))
{

li>
  a href="@article.LinkUrl" class="gd-a">
  div>@article.Title/div>/a>
  /li>
}
 /ul>
 }
 else
 {

 }
/div>
}

應用還是很廣泛的,而且解析代碼相對于標簽替換來說十分簡潔、高效。有時間可以多研究研究,改天有空寫一個模板替換標簽的供大家參考一下。

還是那句老話,這篇文章僅僅是個人的一些理解和實現(xiàn),可能中間會出現(xiàn)一些不合理的地方或是錯誤,請大家指正,我們共同學習研究。
以上就是本文的全部內(nèi)容,希望大家喜歡。
原文地址:http://yuangang.cnblogs.com

您可能感興趣的文章:
  • 詳解ASP.NET Razor 語法
  • ASP.NET MVC重寫RazorViewEngine實現(xiàn)多主題切換
  • 詳解ASP.NET MVC 利用Razor引擎生成靜態(tài)頁
  • ASP.NET MVC4 Razor模板簡易分頁效果
  • ASP.NET Razor模板引擎中輸出Html的兩種方式
  • asp.net模板引擎Razor調(diào)用外部方法用法實例
  • asp.net模板引擎Razor中cacheName的問題分析
  • 使用Asp.net Mvc3 Razor視圖方式擴展JQuery UI Widgets方法介紹
  • 詳細分析ASP.NET Razor之C# 變量

標簽:甘肅 海西 中衛(wèi) 慶陽 聊城 清遠 臨夏

巨人網(wǎng)絡通訊聲明:本文標題《ASP.NET MVC使用RazorEngine解析模板生成靜態(tài)頁》,本文關鍵詞  ASP.NET,MVC,使用,RazorEngine,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ASP.NET MVC使用RazorEngine解析模板生成靜態(tài)頁》相關的同類信息!
  • 本頁收集關于ASP.NET MVC使用RazorEngine解析模板生成靜態(tài)頁的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品国产馆在线真实露脸| 国产欧美日本一区二区三区| 欧美一二三区精品| 亚洲视频 欧洲视频| 成人一区二区三区视频| 国产亚洲欧美日韩日本| 国产999精品久久久久久| 国产亚洲一区二区在线观看| 国产成人精品免费网站| 国产精品美女一区二区三区| 99国产精品久久| 午夜欧美2019年伦理| 欧美一级专区免费大片| 久久精品亚洲国产奇米99| 久久精品视频网| 一区在线观看视频| 亚洲电影一区二区| 国产成人午夜视频| 欧美一区二区啪啪| 亚洲视频一二区| 风流少妇一区二区| 欧美自拍偷拍一区| 精品1区2区在线观看| 日韩不卡一区二区三区| 国产一区二区三区日韩| 正在播放一区二区| 综合自拍亚洲综合图不卡区| 欧美精品乱人伦久久久久久| 亚洲精品在线免费观看视频| 91视频xxxx| 久久精工是国产品牌吗| 成人免费视频在线观看| 久久网站热最新地址| 日韩欧美色电影| 欧美日韩视频专区在线播放| 国内精品免费**视频| 免费观看久久久4p| 天天免费综合色| 日韩极品在线观看| 日日摸夜夜添夜夜添亚洲女人| 自拍偷在线精品自拍偷无码专区| 色域天天综合网| 婷婷一区二区三区| 成人av一区二区三区| 91美女视频网站| 亚洲男女毛片无遮挡| 欧美男同性恋视频网站| 久久综合狠狠综合久久激情 | 亚洲午夜视频在线观看| 日韩一区二区视频| 91国产视频在线观看| 丁香激情综合国产| 精品一区二区三区在线播放| 亚洲成人精品在线观看| 一区二区三区在线观看网站| 欧美国产成人精品| 久久综合丝袜日本网| 日韩精品一区二区三区蜜臀| 欧美视频完全免费看| 日本高清免费不卡视频| 成人av在线资源网站| 国产伦精品一区二区三区免费迷 | 日韩av在线免费观看不卡| 国产精品国产三级国产普通话99| 久久尤物电影视频在线观看| 91精品国产免费| 欧美精品v日韩精品v韩国精品v| 91小视频在线| 色综合一区二区| 色哟哟日韩精品| 在线视频国产一区| 欧美吻胸吃奶大尺度电影| 欧美日本乱大交xxxxx| 日韩欧美国产成人一区二区| 久久色视频免费观看| 中文一区二区完整视频在线观看| 国产日韩欧美精品综合| 国产精品久久久久一区二区三区共| 国产精品青草久久| 亚洲一区二区三区中文字幕在线 | 亚洲丝袜制服诱惑| 亚洲免费观看高清完整版在线观看熊| 亚洲男人都懂的| 亚洲五码中文字幕| 久久机这里只有精品| 狠狠色狠狠色综合系列| 国产亚洲一本大道中文在线| 一二三四社区欧美黄| 亚洲综合色视频| 久久 天天综合| 国产在线一区观看| 91性感美女视频| 欧美一区二区在线免费播放| 欧美成人精品二区三区99精品| 国产婷婷精品av在线| 亚洲一区二区三区爽爽爽爽爽| 久久激情五月婷婷| 色妞www精品视频| 欧美精品一区二区久久婷婷| 亚洲精品欧美综合四区| 亚洲欧洲99久久| 九色综合狠狠综合久久| 91丨porny丨首页| 日韩欧美一级二级| 亚洲激情男女视频| 国产精品99久久久久久宅男| 欧日韩精品视频| 中文字幕亚洲一区二区av在线| 日本午夜一本久久久综合| 成人av动漫网站| 精品国产乱码91久久久久久网站| 亚洲日本在线看| 国产91清纯白嫩初高中在线观看 | 亚洲一区二区精品3399| 久久精品国产秦先生| 欧美在线免费观看亚洲| 日本系列欧美系列| 亚洲综合成人网| 成人性生交大片| 久久久久国产精品麻豆ai换脸| 亚洲大片免费看| 99久久综合精品| 国产精品天干天干在观线| 久久国产综合精品| 7777精品伊人久久久大香线蕉超级流畅| 中文字幕在线观看一区二区| 成人小视频免费在线观看| 精品国精品国产尤物美女| 奇米精品一区二区三区在线观看一| 色久综合一二码| 亚洲精选免费视频| 91麻豆成人久久精品二区三区| 中文在线资源观看网站视频免费不卡 | 亚洲丶国产丶欧美一区二区三区| 国产福利精品一区二区| 久久精品一区四区| 国产精品中文字幕日韩精品| 久久久噜噜噜久久中文字幕色伊伊| 乱中年女人伦av一区二区| 717成人午夜免费福利电影| 天堂精品中文字幕在线| 欧美视频三区在线播放| 视频一区欧美精品| 91精品综合久久久久久| 久久精品99国产精品| 久久嫩草精品久久久精品| 国产美女一区二区| 国产精品私人影院| proumb性欧美在线观看| 亚洲色图都市小说| 制服丝袜亚洲精品中文字幕| 精品在线播放免费| 国产精品久久久久婷婷| 91麻豆swag| 亚洲成人www| 日韩手机在线导航| 成人免费高清在线| 亚洲成人自拍网| 日韩精品一区在线| 成人综合在线视频| 亚洲激情校园春色| 日韩欧美一区中文| 国产乱码精品一区二区三| √…a在线天堂一区| 欧美一区二区三区免费| 国产a级毛片一区| 亚洲高清不卡在线观看| 2020日本不卡一区二区视频| 不卡的电影网站| 五月激情综合婷婷| 久久精品视频一区二区| 欧美无乱码久久久免费午夜一区| 久久99精品国产.久久久久久| 国产精品伦理在线| 欧美精品一卡两卡| a亚洲天堂av| 韩国三级在线一区| 亚洲一区二区三区精品在线| 国产亚洲欧美激情| 欧美日韩精品欧美日韩精品一综合| 国产在线不卡一卡二卡三卡四卡| 1024国产精品| 国产视频一区不卡| 日韩三区在线观看| 色婷婷香蕉在线一区二区| 久久精品国产亚洲一区二区三区| 亚洲另类春色国产| 久久久久久久免费视频了| 欧美精品第1页| 欧美日韩中文字幕一区二区| 成人影视亚洲图片在线| 国模无码大尺度一区二区三区| 亚洲人123区| 亚洲视频资源在线| 国产精品女人毛片| 国产欧美一区二区三区鸳鸯浴| 精品国产一区二区三区久久影院 | 91精品国产黑色紧身裤美女| 一区二区三区日韩| 香蕉影视欧美成人|