我在ASPX中包含了一个字符串资源:
<asp:Literal runat="server" Text="<%$ Resources:Global, MyString %>"/>
假设MyString
的值为“Home”。如何在资源标签中将其转换为小写(“home”)?例如,我不想在资源文件中存储字符串的大写/小写和小写变体。
我意识到我可以正常地(控制之外)这样做:
<%= Resources.Global.MyString.ToLower() %>
但是当我必须将资源用于控件的某些属性时,这无济于事。我希望能够做一些简单的事情,例如:
<asp:Literal runat="server" Text="<%$ (Resources:Global, MyString).ToLower() %>"/>
答案 0 :(得分:2)
我最终构建了自己的ExpressionBuilder
,它使用内置的ResourceExpressionBuilder
来获取基础资源值,然后将其转换为小写:
将基本表达式转换为小写字符串
public class ResourceLowerCase : ResourceExpressionBuilder
{
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
{
CodeExpression getResourceExpression = base.GetCodeExpression(entry, parsedData, context);
CodeMethodInvokeExpression toStringExpression = new CodeMethodInvokeExpression(getResourceExpression, "ToString");
CodeMethodInvokeExpression toLowerExpression = new CodeMethodInvokeExpression(toStringExpression, "ToLower");
return toLowerExpression;
}
}
注册表达式生成器
<system.web>
<expressionBuilders>
<add expressionPrefix="ResourceLowerCase" type="My.Project.Compilation.ResourceLowerCase"/>
</expressionBuilders>
</compilation>
调用表达式构建器
<asp:Literal runat="server" Text="<%$ ResourceLowerCase:Global, MyString %>" />
答案 1 :(得分:0)
你试过了吗?
<asp:Literal runat="server" Text="<%$ Code:
GetGlobaloResources("MyString").ToString().ToLower() %>"/>
只是伪代码。
更新:
http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
只需使用上面链接中的CodeExpressionBuilder即可。