DefaultValueAttribute出错

时间:2011-12-07 00:32:37

标签: asp.net asp.net-mvc

我正在尝试使DefaultValueAttribute值动态化,这就是我试图完成此任务的方式

DefaultValueAttribute(string.Format("Copyright @ 2009 - {0} {1}", DateTime.Now.Year.ToString(), "Gods Creation Taxidermy"))] 

这样做会给我这个错误信息:

  

属性参数必须是常量表达式,typeof表达式   或属性参数类型

的数组创建表达式

我正在尝试做的事情是不可能的,还是我错了?有什么建议或想法吗?

编辑:这是整个酒店:

[CategoryAttribute("Text Settings"),
DescriptionAttribute("Copyright Text..."),
DefaultValueAttribute(string.Format("Copyright @ 2009 - {0} {1}", DateTime.Now.Year.ToString(), "Gods Creation Taxidermy"))]        
public string CopyrightText { get; set; }

2 个答案:

答案 0 :(得分:1)

大多数情况下,使用属性的方式会阻止这种情况。只有一个纯literal常量值,可以在编译之前理解真正开始,可以在声明属性构造函数中使用。基本上只有纯数字,字符串,类型或枚举,没有操作。

例外情况是,查看属性的模块与ICustomTypeDescriptor兼容。

实现ICustomTypeDescriptor的类型可以使用GetAttributes方法返回完全在运行时创建的一组属性。这意味着不仅可以通过对象的状态在运行时控制状态,还可以控制属性的存在。

提醒一下:这种方法的局限性在于,并非属性驱动的所有内容都会查找此接口。事实上,许多人没有。但值得研究一下。 使用ICustomTypeDescriptor的模块的一个示例是PropertyGrid控件。这些描述在一起使用:http://www.codeproject.com/KB/miscctrl/bending_property.aspx

答案 1 :(得分:0)

这是不可能的。

由于错误明确指出,属性参数必须是编译时常量。