我正在构建一个自定义页面缓存实用程序,它使用一种语法{Substitution:GetNonCachedData}
来获取不应该缓存的数据。该解决方案与内置的<@ OutputCache %>
东西非常相似,但没有那么灵活(我不需要它),最重要的是,在检索非缓存数据时允许会话状态可用。
无论如何,我有一个方法可以将 html 中的标记替换为 {Substitution} 标记中命名的静态方法的结果。
例如我的页面:
<html>
<body>
<p>This is cached</p>
<p>This is not: {Substitution:GetCurrentTime}</p>
</body>
</html>
将{Substitution:GetCurrentTime}
用静态方法的结果填充。这是处理发生的地方:
private static Regex SubstitutionRegex = new Regex(@"{substitution:(?<method>\w+)}", RegexOptions.IgnoreCase);
public static string WriteTemplates(string template)
{
foreach (Match match in SubstitutionRegex.Matches(template))
{
var group = match.Groups["method"];
var method = group.Value;
var substitution = (string) typeof (Substitution).GetMethod(method).Invoke(null, null);
template = SubstitutionRegex.Replace()
}
return template;
}
该变量template
是其中包含需要替换的自定义标记的 html。这种方法的问题是,每次我template
用更新的 html 更新变量时,match.Index
变量不再指向正确的字符开头,因为template
现在添加了更多字符。
我可以通过计算字符等或其他一些古怪的方法来提出一个解决方案,但我首先要确保没有更简单的方法可以使用 Regex 对象来实现这一点。有人知道怎么做吗?
谢谢!