asp.net的cms 核心代码篇
• 经验
asp.net的cms 核心代码篇第一篇:我简略描述了一下我的质心系统(质心系统的缩写)标签所表示的含义;anCMS(c#版)第一篇绑定数据;第二篇:我将展示了标签背后真正运行的代码,本文将介绍ASP。网的质心系统(质心系统的缩写)核心代码篇第一篇,我简略描述了一下我的质心系统(质心系统的缩写)标签所表示的含义anCMS(c#版)第一篇绑定数据第二篇,我将展示了标签背后真正运行的代码。asp.net的质心系统(质心系统的缩写)原理篇好像开源有点多余,核心代码就下面这些。复制代码代码如下:使用系统;使用系统。收藏;使用系统。集合。泛型;使用系统100 . Linq使用系统。文本;命名空间an.helper { ///summary ///查找超文本标记语言页面中可以转换成aspx页面的方法的正则表达式////摘要公共类HtmlToAspxMethod { private static T _ Validate TV=new T _ Validate();公共静态字符串ConvertMethodNameHtmlToAspx(字符串方法名){ string str=switch(方法名){ case list :str= TextFile ;打破;//文档case " list pager ":str=" textfile pager ";打破;//文档分页case“list”:str=“Article”;打破;//文章列表case " list pager ":str=" article pager ";打破;//文章分页case plist :str= Products ;打破;//产品列表案例“plist pager”:str=" product pager ";打破;//产品分页case " olist ":str=" One ";打破;//单页列表case“olist pager”:str=" one pager ";打破;//单页分页case " clist ":str=" Category ";打破;//分类列表case"clist pager":str="分类寻呼机";打破;//分类列表case " llist ":str=" Link ";打破;//连接列表case " llist pager ":str=" link pager ";打破;//连接分页case " ilist ":str=" Images ";打破;//图片集列表case " ilist pager ":str=" images pager ";打破;//图片集分页默认:break}返回str}公共静态字符串方法listname= list | list pager | list | list pager | plist pager | olist | olist pager | clist | clist pager | llist | llist pager | ilist | ilist pager | ilist pager | ilist | ilist pager ;公共静态字符串方法filedname= filed | num | category | keyword | sort | page | id ;///摘要///所有方法的入口,第一次运行时遍历该方法。摘要公共静态字符串AllMethodContentRegex=!- {an:( MethodListName ).*?} - [sS]*?-{/an }-;公共静态列表字符串AllMethodContent(字符串内容){返回方法.RegexStr(AllMethodContentRegex,content);} ///摘要///获取所有的方法////汇总公共静态字符串AllMethodRegex=!-{安:(方法列表名)[^}]*}-;公共静态list string all方法(字符串内容){ return方法.RegexStr(AllMethodRegex,content);}///摘要///获取方法的函数名称////汇总公共静态字符串MethodNameRegex=!-{ an:( method listname );公共静态字符串方法名(字符串内容){ string str=var c=方法RegexStr(MethodNameRegex,content);if (c.Count0) { str=c[0].ToString();}返回字符串。替换(!-{安:, );} ///摘要///获取方法的字段和值////汇总公共静态字符串methodfiledregex=( methodfiledname )=[[^]]];公共静态哈希表方法字段(字符串内容){哈希表ht=新哈希表();foreach(方法中的字符串RegexStr(MethodFiledRegex,content)){ string[]arr=s . Split(=);总远视Add(arr[0],arr[1]).替换([, )。替换(], ));}返回ht;}公共静态字符串JsIncludeRegex= script .*rel=share[^]*/script;公共静态string[]js include(string html){ string js= ;Liststring list_include=Method .RegexStr(JsIncludeRegex,html);foreach(string Inc in list _ include){ Liststring include list=Method .RegexStr(@w(?=.js)’,Inc);if (includeList!=null){ js=include list[0]();;html=html .替换(inc,’!-# include file= Share/包含列表[0] .ascx -);} }返回新字符串[] { js,html };} ///摘要///占位符////摘要公共静态字符串ValueOneRegex=@ $ { d }公共静态字符串ValueOne(字符串内容){ foreach(方法中的字符串s .RegexStr(ValueOneRegex,content)){ string num=s . Replace( $ { , ).替换( } , );内容=内容Replace(s, %=a[ num ]% );}返回内容;}公共静态字符串ValueOneToStringFormartRegex=@ $ { d | .*?};公共静态字符串ValueOneToStringFormat(字符串内容){ foreach(方法中的字符串s .regex str(ValueOneToStringFormartRegex,content)){ string str=s . Replace( $ { , ).替换( } , );string[] arr=str .拆分( | );string num=arr[0].ToString();string formart=arr[1].ToString();内容=内容Replace(s, %=TimeFormart(a[ num ], formart )% );}返回内容;}公共静态字符串UrlRouteRegex=@$href[w ][.*?];公共静态字符串UrlRoute(字符串内容){ foreach(方法中的字符串s .RegexStr(UrlRouteRegex,content)) { //$href[index][{aaa , bbb},{ccc , ddd}] //%=UrlRoute( ),new string[,]{{aaa , bbb},{ccc , DDD });% string URL route=s . Replace( $ href[, %=UrlRoute().替换(][,,新字符串[,]{ )。替换( #0 , a[0].ToString()).替换( #1 , a[1].ToString()).替换( #2 , a[2].ToString()).替换( #3 , a[3].ToString()).替换( #4 , a[4].ToString()).替换( #5 , a[5].ToString()).替换( #6 , a[6].ToString()).替换( #7 , a[7].ToString()).替换( #8 , a[8].ToString()).替换( #9 , a[9].ToString());urlRoute=urlRoute .子字符串(0,urlRoute .长度-1);URL route=URL route })% ;内容=内容. Replace(s,URL路由);}返回内容;}公共静态字符串分页regex=@ $ pager [ w ][.*?][ d ];公共静态字符串分页(字符串内容){//$ pager[list][Category=$ Category $][15]//%=分页( list ,new{Category=$category$},int showCounts,object totleCounts)% foreach(方法中的字符串s .RegexStr(PagingRegex,content)){ int numSite=s . LastIndexOf([);string pager=s.Substring(0,numSite);string num=s.Substring(numSite).替换([, )。替换(], );寻呼机=寻呼机。替换( $pager[, %=分页()。替换(][,,新字符串[,]{ );寻呼机=寻呼机。子字符串(0,分页. Length - 1) }, num ,a[0])% ;内容=内容。替换(s,寻呼机);}返回内容;}公共静态字符串LinkHrefRegex=(?=链接。*href=)[^]*;公共静态字符串ScriptSrcRegex=(?=脚本。*src=)[^]*;公共静态字符串ImgSrcRegex=img .*rel=share[^]*/;公共静态字符串模板路径= %=An _ DoMain %/Templates/;公共静态字符串HrefHtml(string html){ Liststring list _ link=Method .RegexStr(LinkHrefRegex,html);foreach(list _ link中的字符串链接Distinct()) { html=html .替换(链接,模板路径链接);} Liststring list_script=Method .RegexStr(ScriptSrcRegex,html);foreach(列表_脚本中的字符串脚本Distinct()) { html=html .替换(脚本,模板路径脚本);} Liststring list_img=方法RegexStr(ImgSrcRegex,html);foreach(list _ img中的字符串img .Distinct()) { html=html .替换(img,img .Replace(src= , src= 模板路径));}返回html}//公共静态字符串ForRegex=!- {for} - [sS]*?-{/for }-;//公共静态字符串For(string arr,string content)//{//foreach(string s in Method .RegexStr(ForRegex,content))//{//string str=" ";//str= % if(1==1){ var arr= arr ;foreach(数组中的变量s){ % ;//str=str s.Replace(!- {for} -, ).替换(!- {/for} -, ) % } } % ;//内容=内容. Replace(s,str);//} //返回内容;//}公共静态字符串FnSplitContentRegex=@ $ split [.*?][.*?];公共静态字符串FnSplitRegex=@ !- {split} - [sS]*?-{/split }-;公共静态字符串FnSplit(字符串内容){ foreach(方法中的字符串s .RegexStr(FnSplitRegex,content)) { var list_split=Method .RegexStr(FnSplitContentRegex,content);字符串拆分方法=" ";if (list_split!=null){ split method=list _ split[0].ToString();} if (splitMethod!=) {字符串来源= ,分隔符= ;var list _ split _ value=拆分方法.拆分(]);if(列表拆分值.长度0) { source=list_split_value[0].替换( $split[, );分隔符=列表拆分值[1].替换([, );如果(来源!= ){ string str= ;如果(电视. is integer(source)== ){ str= % if(1==1){ var arr=a[ source ];foreach(数组中的变量.分裂(分隔符 ){ % ;} else { str= % if(1==1){ var arr= source " ";foreach(数组中的变量.分裂(分隔符 ){ % ;} str=s.Replace(splitMethod, %=s% ).替换(!-{拆分} -, )。替换(!- {/split} -, );str=" % } } %内容=内容. Replace(s,str);} }} }返回内容;}///摘要///将超文本标记语言方法转换成aspx的方法////summary///param name= method name /param///param name= content /param///returns/returns公共静态aspx filed HtmlFiledToAspxFiled(string method name,string content){ aspx filed af=new aspx filed();hashtable ht=方法字段(内容);foreach(ht中的字典条目h){ if(h . key。tostring()== filed ){ af .归档=h值。tostring();} if(h . key。tostring()== num ){ if(TV .是整数(h .值。tostring())== ){ af .ShowCounts=Convert .toint 32(h .值。tostring());如果(af .ShowCounts 0) { af .ShowCounts=1;} else { af .ShowCounts=10} } if(h . key。tostring()== sort ){ af .排序=h .值。tostring();} if(h . key。tostring()== page ){ if(h . value。tostring()== true ){ af .当前值= An _ Current}否则{ af .current=" 1} } if (h.Key.ToString()==类别){ af .CategoryID=h . value。tostring();} if (h.Key.ToString()==关键字){ af .关键字=h .值。tostring();} if (h.Key.ToString()==id) { af .ID=h .值。tostring();} }返回af;}公共静态字符串AspxMethodDataSet(字符串方法名,字符串内容,字符串数据表名){ aspx filed af=HtmlFiledToAspxFiled(方法名,内容);string str=if (methodName .包含( pager ){ if(method name== clist pager ){ str= my hashtable .add( datatableName , ConvertMethodNameHtmlToAspx(方法名)( af .CategoryID )));} else { str=MyHashtable .add( datatableName , ConvertMethodNameHtmlToAspx(方法名)( af .ID , af .类别ID , af .关键字 ));;} } else { if(method name== clist ){ str= my hashtable .add( datatableName , ConvertMethodNameHtmlToAspx(方法名)( af .已存档, af .当前, af .显示计数。排序, af .CategoryID ));;} else { str=MyHashtable .add( datatableName , ConvertMethodNameHtmlToAspx(方法名)( af .已存档, af .当前, af .显示计数。排序, af .ID , af .类别ID , af .关键字 ));;} }返回字符串;} public static string AspxMethodDataRow(string datatableName,string content){ return % if(1==1){ var my rows=my rows( datatableName );如果(myRows!=null){ foreach(我的行中的var a){ % content % } } else { % p style= margin:10px;没有相关信息/p % } } % ;}公共静态字符串服务器函数(字符串内容){ return script runat= server protected override void onl oad(EventArgs e){ content }/script ;}公共静态字符串ServerFunction(string content,string fnName){ return script runat= server 公共void fnName (){ content }/script ;}}公共类AspxFiled { private string _ Filed公共字符串已存档{获取{ return _ Filed}设置{如果(值。包含(文本文件ID,)){ _ Filed=value } else { _ Filed= text file .身份证值;} } } private string _ ID=公共字符串ID { get { return _ ID } set { _ ID=value } } private string _ CategoryID=公共字符串category id { get { return _ category id;} set { _ CategoryID=value } } private string _ Keyword=公共字符串关键字{ get { return _ Keyword } set { _ Keyword=value } }私有字符串排序公共字符串排序{ get { return _ Sort } set { _ Sort=value } } private int _ show counts=0;public int show counts { get { return _ show counts;} set { _ ShowCounts=value} }私有字符串_当前= 1公共字符串当前{ get { return _ Current } set { _ Current=value } } }///摘要///html和aspx的方法名称对应替换////摘要公共类ConvertHtmlToAspx { public string DataTableName(int num,string name) { return Method .Md5(日期时间现在。ToLongDateString()new Random().Next(1000) num new Random().下一个(1000)名);} public string ToAspx(string html,string ascxName){ html=AllToAspx(html);liststring list _ all方法content=HtmlToAspxMethod .AllMethodContent(html);字符串load=int I=0;foreach(list _ all方法内容中的字符串所有方法内容){ I;string all method=HtmlToAspxMethod .所有方法(所有方法内容)[0];//!-{ an:list }-string method name=HtmlToAspxMethod .方法名(所有方法);//方法名称!-{ an:list Hashtable method filed=HtmlToAspxMethod .方法字段(所有方法);//filed=[title]sort=[time desc]string content=所有方法内容.Replace(allMethod, ).替换(!- {/an} -, );content=HtmlToAspxMethod .ValueOne(内容);content=HtmlToAspxMethod .ValueOneToStringFormat(内容);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 .js include(html);html=js[1];load=js[0];load=HtmlToAspxMethod .服务器功能(加载);} else { load=HtmlToAspxMethod .ServerFunction(load,ascxName);} html=HtmlToAspxMethod .HrefHtml(html);//链接转换返回加载html}私有字符串AllToAspx(string html){ html=html .Replace($categoryname , %=An _ category name % );//html=html .替换( $title$ , %=An_Title% ).//页面标题//Replace($keywords$ , %=An_KeyWords% ).//页面关键词//Replace($description$ , %=An_Description% ).//页面描述//Replace($domain$ , %=An_DoMain% ).//网站域名//Replace($categoryname$ , %=An_CategoryName% ).//分类名称//Replace($contact$ , An_Contact ).//联系我们//替换( $id$ , An_ID ).//明细ID //Replace($category$ , An_CategoryID ).//分类ID//替换( $同济$ , %=安同济% )。//Replace($keyword$ , An _ KeyWord );//搜索的关键词html=HtmlToAspxMethod .URL路由(html);html=HtmlToAspxMethod .分页(html);html=HtmlToAspxMethod .FnSplit(html);返回html}} }呵呵,会不会太肤浅了。主要就是通过上面这个代码,将超文本标记语言模版通过替换后变成aspx来运行。我要去完善我的羧甲基淀粉钠啦。