3

我在 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() %>"/>
4

2 回答 2

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 %>" />
于 2013-06-26T12:06:06.510 回答
0

你有没有尝试过:

<asp:Literal runat="server" Text="<%$ Code:
GetGlobaloResources("MyString").ToString().ToLower() %>"/>

只是伪代码。

更新:
http ://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx

只需使用上面链接中的 CodeExpressionBuilder。

于 2013-06-26T07:12:29.450 回答