时间:2016-02-16 00:17 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【asp.net的cms 核心代码篇】,下面是详细的讲解!
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 name="methodName"></param>
/// <param name="content"></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 style='margin:10px;'>没有相关信息</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;
}
}
}
关于asp.net的cms 核心代码篇的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 【asp】asp.net开发中常见公共捕获异常方式总结(
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
