c# html转aspx,关于c#:aspx至Razor语法转换器?

这个博客介绍了一个静态类`RazorConversor`,用于将ASPX文件批量转换为Razor语法。代码主要通过正则表达式操作,转换命名空间引用、头部指令、表达式和代码块,实现ASPX到Razor的转换。该工具对于ASP.NET开发者更新项目到使用Razor视图引擎非常有用。
摘要由CSDN通过智能技术生成

public static class RazorConversor

{

public static void ConvertAll(string directory)

{

string[] array = Directory.GetFiles(directory,"*.aspx", SearchOption.AllDirectories).Concat(

Directory.GetFiles(directory,"*.ascx", SearchOption.AllDirectories)).ToArray();

foreach (var fileName in array)

{

string aspxCode = File.ReadAllText(fileName);

string razorCode = ConvertToRazor(aspxCode);

File.WriteAllText(fileName, razorCode); //rename manually to update .csproj & source control

}

}

static readonly string[] DefaultNamespaces = new string[]

{

"System.Web.Helpers",

"System.Web.Mvc",

"System.Web.Mvc.Ajax",

"System.Web.Mvc.Html",

"System.Web.Routing",

"System.Web.WebPages",

};

public static string ConvertToRazor(string aspxCode)

{

return ConvertToRazor(aspxCode, DefaultNamespaces);

}

public static string ConvertToRazor(string aspxCode, string[] defaultNamespaces)

{

//namespaces

string text2 = Regex.Replace(aspxCode, @".*?)""\s+%>",

m => defaultNamespaces.Contains(m.Groups["ns"].Value) ? null :"@using" + m.Groups["ns"].Value);

//headers

string text3 = Regex.Replace(text2, @".*?)%>", m => "@{" + m.Groups["dir"].Value +"}"); // Preserves headers

//expressions

string text4 = Regex.Replace(text3, @".*?)%>", m =>

{

string expr = m.Groups["expr"].Value.Trim();

string cleanExpr = Regex.Replace(expr, @"(""(\""|[^""])*"")|(@""([^""]|"""")*"")|(\([^\(\)]*(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*\))", m2 =>"");

return cleanExpr.Contains(' ') ?"@(" + expr +")" :"@" + expr;

}, RegexOptions.Singleline);

//code blocks

string text5 = Regex.Replace(text4, @".*?)%>", m =>

{

string code = m.Groups["code"].Value.Trim();

Dictionary stringLiterals = new Dictionary();

code = Regex.Replace(code, @"(""(\""|[^""])*"")|(@""([^""]|"""")*"")", m2 =>

{

string key ="";

stringLiterals.Add(key, m2.Value);

return key;

});

string result = Regex.Replace(code,

@"((?(else|(for|switch|foreach|using|while|if)\s*\([^\(\)]*(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*\))\s*)" +

@"((?{[^{}]*(((?'OpenCurly'{)[^{}]*)+((?'CloseCurly-OpenCurly'})[^{}]*)+)*})|(?{.*))|" +

@"(?((?!({|}|\s)(for|switch|foreach|using|while|if|else)(\s|{|\()).)+))",

m2 =>

{

if(m2.Value.Trim().Length == 0 || m2.Value.StartsWith("else")|| m2.Value.StartsWith("}"))

return m2.Value;

if(m2.Groups["text"].Success)

return"@{" + m2.Value.Trim() +"}

";

return"@" + m2.Value;

}, RegexOptions.ExplicitCapture | RegexOptions.Singleline);

result = Regex.Replace(result, @"",

m2 => stringLiterals[m2.Value]);

return result;

}, RegexOptions.Singleline);

return text5;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值