我不知道如果我回答你的问题,但是... 如果你可以从
{tokenname}
改变你的符号来像
<%$ ZeusExpression:tokenname %>
,你可以考虑创建您的System.Web.Compilation.ExpressionBuilder。
阅读您的评论后...
有越来越访问使用的ExpressionBuilder当前页面的其他方式:只是...创建表达式。 ;-) 改变只是有点从MSDN样本,并假定你页面的代码包含这样
public object GetData(string token);
的方法,你可以实现这样的事情
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
{
Type type1 = entry.DeclaringType;
PropertyDescriptor descriptor1 = TypeDescriptor.GetProperties(type1)[entry.PropertyInfo.Name];
CodeExpression[] expressionArray1 = new CodeExpression[1];
expressionArray1[0] = new CodePrimitiveExpression(entry.Expression.Trim());
return new CodeCastExpression(
descriptor1.PropertyType,
new CodeMethodInvokeExpression(
new CodeThisReferenceExpression(),
"GetData",
expressionArray1));
}
这将替换您的占位符用这样调用
(string)this.GetData("tokenname");
当然,你可以阐述这一得多了,或许用“实用方法”,以简化和“保护”访问数据(访问属性,不涉及特殊方法,错误处理等)。
的东西,而不是替换(例如)
(string)Utilities.GetData(this, "tokenname");
希望这有助于。
这是一个非常有趣的解决方案,感谢您的输入:) 问题是我需要来自我当前页面的数据以呈现替换文本 - 不确定是否可以将当前页面中的内容传递到表达式生成器? 我刚刚找到了一个解决方案......也许我应该回答我自己的问题,以防其他人想知道 – RYFN 2009-08-12 14:57:17
是的,我同意你应该给你自己的解决方案。无论如何,我编辑我的建议(试图)回答你的一些担忧。 – 2009-08-17 10:55:55