亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.net的cms 核心代碼篇

2024-07-10 13:23:12
字體:
來源:轉載
供稿:網友
第一篇,我簡略描述了一下我的cms標簽所表示的含義。anCMS(c#版)第一篇綁定數據

第二篇,我將展示了標簽背后真正運行的代碼。asp.net的cms 原理篇

好像開源有點多余,核心代碼就下面這些。

復制代碼 代碼如下:


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace an.helper
{
/// <summary>
/// 查找html頁面中可以轉換成aspx頁面的方法 的正則表達式
/// </summary>
public class HtmlToAspxMethod
{
private static T_Validate tv=new T_Validate();
public static string ConvertMethodNameHtmlToAspx(string methodName)
{
string str="";
switch(methodName)
{
case "list ": str = "TextFile"; break; //文檔
case "listpager ": str = "TextFilePager"; break; //文檔分頁
case "alist ": str = "Article"; break;//文章列表
case "alistpager ": str = "ArticlePager"; break;//文章分頁
case "plist ": str = "Products"; break;//產品列表
case "plistpager ": str = "ProductsPager"; break;//產品分頁
case "olist ": str = "One"; break;//單頁列表
case "olistpager ": str = "OnePager"; break;//單頁分頁
case "clist ": str = "Category"; break; //分類列表
case "clistpager ": str = "CategoryPager"; break; //分類列表
case "llist ": str = "Link"; break;//連接列表
case "llistpager ": str = "LinkPager"; break;//連接分頁
case "ilist ": str = "Images"; break;//圖片集列表
case "ilistpager ": str = "ImagesPager"; break;//圖片集分頁
default: break;
}
return str;
}
public static string MethodListName = "list |listpager |alist |alistpager |plist |plistpager |olist |olistpager |clist |clistpager |llist |llistpager |ilist |ilistpager ";
public static string MethodFiledName = "filed|num|category|keyword|sort|page|id";
/// <summary>
/// 所有方法的入口,第一次運行時遍歷該方法。
/// </summary>
public static string AllMethodContentRegex = "<!--{an:(" + MethodListName + ").*?}-->[//s//S]*?<!--{/an}-->";
public static List<string> AllMethodContent(string content)
{
return Method.RegexStr(AllMethodContentRegex, content);
}
/// <summary>
/// 獲取所有的方法
/// </summary>
public static string AllMethodRegex = "<!--{an:(" + MethodListName + ")[^}]*}-->";
public static List<string> AllMethod(string content)
{
return Method.RegexStr(AllMethodRegex, content);
}

/// <summary>
/// 獲取方法的函數名稱
/// </summary>
public static string MethodNameRegex = "<!--{an:(" + MethodListName + ")";
public static string MethodName(string content)
{
string str = "";
var c=Method.RegexStr(MethodNameRegex, content);
if (c.Count>0)
{
str = c[0].ToString();
}
return str.Replace("<!--{an:", "");
}
/// <summary>
/// 獲取方法的字段和值
/// </summary>
public static string MethodFiledRegex = "(" + MethodFiledName + ")=//[[^]]+]";
public static Hashtable MethodFiled(string content)
{
Hashtable ht = new Hashtable();
foreach (string s in Method.RegexStr(MethodFiledRegex, content))
{
string[] arr = s.Split('=');
ht.Add(arr[0], arr[1].Replace("[", "").Replace("]", ""));
}
return ht;
}
public static string JsIncludeRegex = "<script.*rel=/"share/"[^>]*></script>";
public static string[] JsInclude(string html)
{
string js = "";
List<string> list_include = Method.RegexStr(JsIncludeRegex, html);
foreach (string inc in list_include)
{
List<string> includeList = Method.RegexStr(@"/w+(?=/.js)", inc);
if (includeList != null)
{
js += includeList[0] + "(); ";
html = html.Replace(inc, "<!--#include file=/"Share/" +includeList[0] + ".ascx/"--> ");
}
}
return new string[] { js, html };
}
/// <summary>
/// 占位符
/// </summary>
public static string ValueOneRegex = @"/${/d+}";
public static string ValueOne(string content)
{
foreach (string s in Method.RegexStr(ValueOneRegex, content))
{
string num = s.Replace("${", "").Replace("}", "");
content = content.Replace(s, "<%=a[" + num + "]%>");
}
return content;
}

public static string ValueOneToStringFormartRegex = @"/${/d+/|.*?}";
public static string ValueOneToStringFormat(string content)
{
foreach (string s in Method.RegexStr(ValueOneToStringFormartRegex, content))
{
string str = s.Replace("${", "").Replace("}", "");
string[] arr = str.Split('|');
string num = arr[0].ToString();
string formart = arr[1].ToString();
content = content.Replace(s, "<%=TimeFormart(a[" + num + "],/"" + formart + "/")%>");
}
return content;
}

public static string UrlRouteRegex = @"/$href/[/w+/]/[.*?/]";
public static string UrlRoute(string content)
{
foreach (string s in Method.RegexStr(UrlRouteRegex, content))
{
//$href[index][{"aaa","bbb"},{"ccc","ddd"}]
//<%=UrlRoute("",new string[,]{{"aaa","bbb"},{"ccc","ddd"}});%>
string urlRoute = s.Replace("$href[", "<%=UrlRoute(/"").
Replace("][", "/",new string[,]{ ").
Replace("#0", "a[0].ToString()").
Replace("#1", "a[1].ToString()").
Replace("#2", "a[2].ToString()").
Replace("#3", "a[3].ToString()").
Replace("#4", "a[4].ToString()").
Replace("#5", "a[5].ToString()").
Replace("#6", "a[6].ToString()").
Replace("#7", "a[7].ToString()").
Replace("#8", "a[8].ToString()").
Replace("#9", "a[9].ToString()");
urlRoute = urlRoute.Substring(0,urlRoute.Length - 1);
urlRoute = urlRoute + "})%>";
content = content.Replace(s, urlRoute);
}
return content;
}
public static string PagingRegex = @"/$pager/[/w+/]/[.*?/]/[/d+/]";
public static string Paging(string content)
{
//$pager[list][Category=$category$][15]
//<%=Paging("list",new{Category=$category$}, int showCounts, object totleCounts)%>
foreach (string s in Method.RegexStr(PagingRegex, content))
{
int numSite=s.LastIndexOf('[');
string pager = s.Substring(0, numSite);
string num = s.Substring(numSite).Replace("[", "").Replace("]", "");

pager = pager.Replace("$pager[", "<%=Paging(/"").
Replace("][", "/",new string[,]{");
pager = pager.Substring(0, pager.Length - 1) + "}," + num + ",a[0])%>";
content = content.Replace(s, pager);
}
return content;
}


public static string LinkHrefRegex = "(?<=<link.*href=/")[^/"]*";
public static string ScriptSrcRegex = "(?<=<script.*src=/")[^/"]*";
public static string ImgSrcRegex = "<img.*rel=/"share/"[^>]*/>";
public static string TemplatePath = "<%=An_DoMain%>/Templates/";

public static string HrefHtml(string html)
{
List<string> list_link = Method.RegexStr(LinkHrefRegex, html);
foreach (string link in list_link.Distinct())
{
html = html.Replace(link, TemplatePath + link);
}
List<string> list_script = Method.RegexStr(ScriptSrcRegex, html);
foreach (string script in list_script.Distinct())
{
html = html.Replace(script, TemplatePath + script);
}
List<string> list_img = Method.RegexStr(ImgSrcRegex, html);
foreach (string img in list_img.Distinct())
{
html = html.Replace(img, img.Replace("src=/"", "src=/"" + TemplatePath));
}
return html;
}


//public static string ForRegex = "<!--{for}-->[//s//S]*?<!--{/for}-->";
//public static string For(string arr, string content)
//{
// foreach (string s in Method.RegexStr(ForRegex, content))
// {
// string str = "";
// str = "<%if(1==1){var arr=" + arr + ";foreach(var s in arr){%>";
// str = str + s.Replace("<!--{for}-->", "").Replace("<!--{/for}-->", "") + "<%}}%>";
// content=content.Replace(s,str);
// }
// return content;
//}

public static string FnSplitContentRegex = @"/$split/[.*?/]/[.*?/]";
public static string FnSplitRegex = @"<!--{split}-->[/s/S]*?<!--{/split}-->";
public static string FnSplit(string content)
{
foreach (string s in Method.RegexStr(FnSplitRegex, content))
{
var list_split = Method.RegexStr(FnSplitContentRegex, content);
string splitMethod = "";
if (list_split != null)
{
splitMethod = list_split[0].ToString();
}
if (splitMethod != "")
{
string source = "", separator = "";
var list_split_value = splitMethod.Split(']');
if (list_split_value.Length > 0)
{
source = list_split_value[0].Replace("$split[", "");
separator = list_split_value[1].Replace("[", "");
if (source != "")
{
string str = "";
if (tv.IsInteger(source) == "")
{
str = "<%if(1==1){var arr=a[" + source + "];foreach(var s in arr.Split('"+separator+"')){%>";
}
else
{
str = "<%if(1==1){var arr=/"" + source + "/";foreach(var s in arr.Split('" + separator + "')){%>";
}
str += s.Replace(splitMethod, "<%=s%>").Replace("<!--{split}-->", "").Replace("<!--{/split}-->", "");
str += "<%}}%>";
content = content.Replace(s, str);
}
}

}
}
return content;
}





/// <summary>
/// 將html方法轉換成aspx的方法
/// </summary>
/// <param></param>
/// <param></param>
/// <returns></returns>
public static AspxFiled HtmlFiledToAspxFiled(string methodName, string content)
{
AspxFiled af = new AspxFiled();
Hashtable ht = MethodFiled(content);
foreach (DictionaryEntry h in ht)
{
if (h.Key.ToString() == "filed")
{
af.Filed = h.Value.ToString();
}
if (h.Key.ToString() == "num")
{
if (tv.IsInteger(h.Value.ToString()) == "")
{
af.ShowCounts = Convert.ToInt32(h.Value.ToString());
if (af.ShowCounts < 0)
{
af.ShowCounts = 1;
}
}
else
{
af.ShowCounts = 10;
}
}
if (h.Key.ToString() == "sort")
{
af.Sort = h.Value.ToString();
}
if (h.Key.ToString() == "page")
{
if (h.Value.ToString() == "true")
{
af.Current = "An_Current";
}
else
{
af.Current = "1";
}
}
if (h.Key.ToString() == "category")
{
af.CategoryID = h.Value.ToString();
}
if (h.Key.ToString() == "keyword")
{
af.Keyword = h.Value.ToString();
}
if (h.Key.ToString() == "id")
{
af.ID = h.Value.ToString();
}
}
return af;
}

public static string AspxMethodDataSet(string methodName,string content,string datatableName)
{
AspxFiled af = HtmlFiledToAspxFiled(methodName, content);
string str = "";
if (methodName.Contains("pager"))
{
if (methodName == "clistpager ")
{
str = "MyHashtable.Add(/"" + datatableName + "/", " + ConvertMethodNameHtmlToAspx(methodName) + "(/"" + af.CategoryID + "/"));";
}
else
{
str = "MyHashtable.Add(/"" + datatableName + "/", " + ConvertMethodNameHtmlToAspx(methodName) + "(/"" + af.ID + "/",/"" + af.CategoryID + "/",/"" + af.Keyword + "/"));";
}
}
else
{
if (methodName == "clist ")
{
str = "MyHashtable.Add(/"" + datatableName + "/", " + ConvertMethodNameHtmlToAspx(methodName) + "(/"" + af.Filed + "/", " + af.Current + ", " + af.ShowCounts + ", /"" + af.Sort + "/", /"" + af.CategoryID + "/"));";
}
else
{
str = "MyHashtable.Add(/"" + datatableName + "/", " + ConvertMethodNameHtmlToAspx(methodName) + "(/"" + af.Filed + "/", " + af.Current + ", " + af.ShowCounts + ", /"" + af.Sort + "/", /"" + af.ID + "/", /"" + af.CategoryID + "/", /"" + af.Keyword + "/"));";
}
}
return str;
}
public static string AspxMethodDataRow(string datatableName,string content)
{
return "<%if(1==1){var myRows = MyRows(/"" + datatableName + "/"); if (myRows != null){foreach (var a in myRows){ %>" + content + "<%}}else{%><p>沒有相關信息</p><%}}%>";
}

public static string ServerFunction(string content)
{
return "<script runat=/"server/">protected override void OnLoad(EventArgs e){" + content + "}</script>";
}
public static string ServerFunction(string content, string fnName)
{
return "<script runat=/"server/">public void " + fnName + "(){" + content + "}</script>";
}

}

public class AspxFiled
{
private string _Filed;
public string Filed
{
get{ return _Filed; }
set
{
if (value.Contains("TextFile.ID,"))
{
_Filed = value;
}
else
{
_Filed = "TextFile.ID," + value;
}
}
}
private string _ID = "";
public string ID
{
get { return _ID; }
set { _ID = value; }
}
private string _CategoryID = "";
public string CategoryID
{
get { return _CategoryID; }
set { _CategoryID = value; }
}
private string _Keyword = "";
public string Keyword
{
get { return _Keyword; }
set { _Keyword = value; }
}

private string _Sort;
public string Sort
{
get { return _Sort; }
set { _Sort = value; }
}
private int _ShowCounts = 0;
public int ShowCounts
{
get{return _ShowCounts;}
set { _ShowCounts = value; }
}
private string _Current = "1";
public string Current
{
get { return _Current; }
set { _Current = value;}
}
}
/// <summary>
/// html和aspx的方法名稱對應替換
/// </summary>
public class ConvertHtmlToAspx
{
public string DataTableName(int num,string name)
{
return Method.Md5(DateTime.Now.ToLongDateString() + new Random().Next(1000) + num + new Random().Next(1000) + name);
}
public string ToAspx(string html,string ascxName)
{
html = AllToAspx(html);
List<string> list_AllMethodContent = HtmlToAspxMethod.AllMethodContent(html);
string load = "";
int i = 0;
foreach (string allMethodContent in list_AllMethodContent)
{
i++;
string allMethod = HtmlToAspxMethod.AllMethod(allMethodContent)[0];//<!--{an:list}-->
string methodName = HtmlToAspxMethod.MethodName(allMethod);//方法名稱<!--{an:list
Hashtable methodFiled = HtmlToAspxMethod.MethodFiled(allMethod);//filed=[title] sort=[time desc]
string content = allMethodContent.Replace(allMethod, "").Replace("<!--{/an}-->", "");
content = HtmlToAspxMethod.ValueOne(content);
content = HtmlToAspxMethod.ValueOneToStringFormat(content);
string dataTableName = DataTableName(i,ascxName);
load += HtmlToAspxMethod.AspxMethodDataSet(methodName, allMethod, dataTableName);
content = HtmlToAspxMethod.AspxMethodDataRow(dataTableName, content);
html = html.Replace(allMethodContent, content);
}
if (ascxName == "")
{
string[] js=HtmlToAspxMethod.JsInclude(html);
html = js[1];
load += js[0];
load = HtmlToAspxMethod.ServerFunction(load);
}
else
{
load = HtmlToAspxMethod.ServerFunction(load, ascxName);
}
html = HtmlToAspxMethod.HrefHtml(html);//鏈接轉換
return load + html;
}
private string AllToAspx(string html)
{
html = html.Replace("$categoryname", "<%=An_CategoryName%>");
//html = html.Replace("$title$", "<%=An_Title%>").//頁面標題
// Replace("$keywords$", "<%=An_KeyWords%>").//頁面關鍵詞
// Replace("$description$", "<%=An_Description%>").//頁面描述
// Replace("$domain$", "<%=An_DoMain%>").//網站域名
// Replace("$categoryname$", "<%=An_CategoryName%>").//分類名稱
// Replace("$contact$", "/"+An_Contact+/"").//聯系我們
// Replace("$id$", "An_ID").//明細ID
// Replace("$category$", "An_CategoryID").//分類ID
// Replace("$tongji$", "<%=An_TongJi%>").
// Replace("$keyword$", "/"+An_KeyWord+/"");//搜索的關鍵詞
html = HtmlToAspxMethod.UrlRoute(html);
html = HtmlToAspxMethod.Paging(html);
html = HtmlToAspxMethod.FnSplit(html);

return html;
}

}
}


呵呵,會不會太膚淺了。

主要就是通過上面這個代碼,將html模版通過替換后變成aspx來運行。

我要去完善我的CMS啦。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级在线播放| 超碰97人人做人人爱少妇| 午夜剧场成人观在线视频免费观看| 伦伦影院午夜日韩欧美限制| 日韩欧美国产视频| 国产日产欧美精品| 国产精品欧美日韩久久| 国产69精品久久久久99| 国产精品直播网红| 91精品国产色综合久久不卡98口| 综合av色偷偷网| 精品一区二区电影| 韩国19禁主播vip福利视频| 精品国产一区二区三区在线观看| 欧美不卡视频一区发布| 亚洲日本中文字幕| 久久香蕉国产线看观看av| 欧美激情第99页| 91久久久久久| 亚洲大胆美女视频| 高清在线视频日韩欧美| 日韩欧美在线免费观看| 欧美成人午夜激情在线| 成人性教育视频在线观看| 亚洲精品美女在线观看播放| 日韩久久免费视频| 亚洲男人天堂网站| 在线精品91av| 国产精品一区二区三区毛片淫片| 欧美精品一区二区三区国产精品| 国产精品日韩一区| 成人妇女免费播放久久久| 亚洲黄色免费三级| 亚洲人成网7777777国产| 久久影院在线观看| 亚洲精品一区二区网址| 国产成人在线一区二区| 亚洲国产精品成人va在线观看| 亚洲男人天堂九九视频| 国产精品第一页在线| 日韩美女福利视频| 日韩在线欧美在线| 欧美重口另类videos人妖| 欧美亚洲另类激情另类| 久热国产精品视频| 国产欧美一区二区三区视频| 国产精品看片资源| 成人在线精品视频| 91色在线视频| 97视频色精品| 中文字幕亚洲综合久久| 国产大片精品免费永久看nba| 国产精品高潮呻吟久久av无限| 亚洲综合小说区| 国产日韩在线亚洲字幕中文| 91在线免费网站| 国产免费一区二区三区香蕉精| 久久免费视频网站| 欧美黄色片免费观看| 久久久精品国产亚洲| 亚洲天堂2020| 亚洲欧美激情另类校园| 91精品久久久久久久久不口人| 亚洲成人久久网| 亚洲国产欧美一区| 久久久久九九九九| 中文字幕日韩精品有码视频| 日韩在线视频网站| 岛国av一区二区在线在线观看| 国产日本欧美视频| 欧美激情中文网| 亚洲自拍小视频免费观看| 欧美乱人伦中文字幕在线| 国产成人精品久久二区二区91| 亚洲欧美一区二区激情| 精品久久久久久中文字幕大豆网| 最近2019好看的中文字幕免费| 欧美精品第一页在线播放| 国产精品亚洲欧美导航| 国产精品一区二区三区在线播放| 亚洲人成伊人成综合网久久久| 日韩69视频在线观看| 亚洲xxxx妇黄裸体| 久久综合电影一区| 欧美日韩国产va另类| 亚洲激情视频网| 97视频在线观看免费高清完整版在线观看| 8x海外华人永久免费日韩内陆视频| 亚洲日韩中文字幕在线播放| 欧美在线视频a| 久久国产精彩视频| 欧美影院在线播放| 国产日韩欧美在线播放| 88国产精品欧美一区二区三区| 欧美激情视频在线| 一个人看的www欧美| 2019亚洲日韩新视频| 色妞欧美日韩在线| 久久久久久尹人网香蕉| 色综合伊人色综合网站| 亚洲精品色婷婷福利天堂| 国产精品偷伦视频免费观看国产| 日韩电影免费观看中文字幕| 日韩高清人体午夜| 日韩精品免费在线视频观看| 欧美激情欧美狂野欧美精品| 欧美成人小视频| 97在线视频免费播放| 欧美成人午夜激情在线| 欧美日韩一区二区三区在线免费观看| 亚洲美女性生活视频| 亚洲精品天天看| 91av国产在线| 成人444kkkk在线观看| 久久久av免费| 久久精彩免费视频| 国产精品偷伦视频免费观看国产| 国产高清视频一区三区| 亚洲精品久久久久中文字幕二区| 成人黄色免费在线观看| 91免费版网站入口| 国产精品视频公开费视频| 亚洲第一网站男人都懂| 欧美在线国产精品| 狠狠爱在线视频一区| 高清欧美一区二区三区| 国产成人精品综合| 欧美激情视频一区| 日韩激情视频在线播放| 精品久久久久久久久久| 中文字幕亚洲二区| 亚洲国产精品电影在线观看| 日韩中文字幕亚洲| 亚洲综合中文字幕在线| 搡老女人一区二区三区视频tv| 欧美激情喷水视频| 97国产成人精品视频| 欧美电影在线观看完整版| 91禁国产网站| 人人爽久久涩噜噜噜网站| 在线成人中文字幕| 亚洲第一免费播放区| 国产精品国产三级国产aⅴ浪潮| 国产精品老牛影院在线观看| 97精品伊人久久久大香线蕉| 欧美乱大交xxxxx另类电影| 亚洲精品电影网站| 久久91精品国产| 亚洲电影免费观看高清完整版| 欧美综合国产精品久久丁香| 亚洲美女免费精品视频在线观看| 国产91久久婷婷一区二区| 亚洲加勒比久久88色综合| 亚洲精品成人久久| 精品久久久国产| 97国产精品免费视频| 国内成人精品一区| 欧美国产亚洲精品久久久8v| 久久av红桃一区二区小说| 欧美日韩国产丝袜美女| 国产日韩av高清| 成人有码在线视频| 欧美美女18p| 日韩精品福利在线|