2013-06-25 63 views
3

我包括在一个ASPX字符串资源:ASP.NET字符串资源为小写?

<asp:Literal runat="server" Text="<%$ Resources:Global, MyString %>"/> 

假设的MyString值是“家”。我怎样才能将它转换为资源标签中的小写字母(“home”)?例如,我不希望在资源文件中存储字符串的大写/小写变体。

我知道我可以这样通常做这个(控制外):

<%= Resources.Global.MyString.ToLower() %> 

但是,当我必须使用的资源进行控制的一些属性,并不能帮助。我希望能够做一些简单的如:

<asp:Literal runat="server" Text="<%$ (Resources:Global, MyString).ToLower() %>"/> 

回答

0

你试过:

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

只是伪代码。

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

刚刚从上面的链接使用CodeExpressionBuilder。

+0

它看起来并不像你可以使用''<%$ %>块中的任何 “代码”:'表达“<%$ Resources.Global.MyString.ToLower( )%>'无效。表达式使用语法<%$ prefix:value%>' –

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 %>" />