在全局变量的注释中设置DataFormatString

时间:2012-12-13 05:50:28

标签: c# asp.net-mvc asp.net-mvc-3 data-annotations

假设我有一个类似下面的注释

[DisplayFormat(DataFormatString = "{0:#.00#}", ApplyFormatInEditMode = true)]

效果很好。但是假设我想要实时替换DataFormatString,有时像{0:#。00#},有时候{0:#。000#},基于用户选择的一些应用程序设置。有没有办法做到这一点?

我尝试将格式字符串存储在全局变量中,但它给出了以下错误。

  

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

的数组创建表达式

如果我使全局变量保持不变,那么它的工作原理会失败。有关解决方案的任何建议吗?

基本上我想给用户一个选项来普遍设置小数空间,而不必在每个视图/控制器的基础上实现该功能。

我知道我可以使用NumberFormat.CurrencyDecimalDigits来放置文化。但这会忽略小数点后的零。

2 个答案:

答案 0 :(得分:1)

属性需要常量字符串,你无法改变它。此属性也不提供提供资源名称的功能。因此,我认为最好的方法是为此属性创建DisplayTemplate和EditorTemplate。

[UIHint("Bar")]
public decimal Bar { get; set; }

在Bar模板中,您可以根据用户选择的某些应用程序设置更改格式:

@model decimal

@Model.ToString(HttpContext.Current.Session["format"].ToString())

答案 1 :(得分:1)

有一个名为MvcExtensions的好库,其中一个功能是流畅的元数据配置。它允许您流畅地构建模型元数据而不是DataAnnotations。 使用此库,您可以完成任务:

Configure(x => x.Payment)
  .Format(() => ConfigurationManager.DataFormatString)