为什么我不能将DisplayAttribute与Global Resource文件一起使用?

时间:2011-11-17 20:25:11

标签: c# asp.net resources

这个问题已经解释了我尝试做什么,这是一个例子:

[Display(Name = Localization.City)]
public string City { get; set; }

错误是,但(对我来说)没有意义:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

4 个答案:

答案 0 :(得分:6)

为了将DisplayAttribute与资源一起使用,您需要使用

[Display(ResourceType=typeof(Localization), Name="City")]
public string City {get;set;}

不要忘记打开资源文件并将访问修饰符设置为public而不是internal。

答案 1 :(得分:1)

必须在编译时修复属性参数。 请参阅Jon Skeet在SO上的答案here

  

表达式E是一个attribute-argument-expression,如果全部的话   以下陈述是> true:•E的类型是属性   参数类型(第17.1.3节)。 •在编译时,E的值可以是   解析为以下之一:•常量值。 •System.Type   宾语。 •属性 - 参数表达式的一维数组。

你能说明你如何宣布'Localization.City'吗?

答案 2 :(得分:1)

离开:C# attribute text from resource file?

public class CustomAttribute : Attribute
{

    public CustomAttribute(Type resourceType, string resourceName)
    {
                Message = ResourceHelper.GetResourceLookup(resourceType, resourceName);
    }

    public string Message { get; set; }
}

public class ResourceHelper
{
    public static  string GetResourceLookup(Type resourceType, string resourceName)
    {
        if ((resourceType != null) && (resourceName != null))
        {
                PropertyInfo property = resourceType.GetProperty(resourceName, BindingFlags.Public | BindingFlags.Static);
                if (property == null)
                {
                        throw new InvalidOperationException(string.Format("Resource Type Does Not Have Property"));
                }
                if (property.PropertyType != typeof(string))
                {
                        throw new InvalidOperationException(string.Format("Resource Property is Not String Type"));
                }
                return (string)property.GetValue(null, null);
        }
        return null; 
        }
}

答案 3 :(得分:0)

错误信息已清除。

Localization.City不是常数。我假设它只是一个static'只读'字段/属性。