0

假设我有如下注释

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

它工作得很好。但是假设我想根据用户选择的某些应用程序设置实时替换 DataFormatString,即有时像 {0:#.00#} 有时是 {0:#.000#}。有没有办法做到这一点?

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

属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式

如果我将全局变量设为常量,它会起作用,但目的就失去了。关于变通的任何建议?

基本上,我想为用户提供一个选项来通用设置小数位,而不必在每个视图/控制器的基础上实现该功能。

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

4

2 回答 2

1

有一个很好的库叫做MvcExtensions,它的一个特点是流畅的元数据配置。它允许您流畅地构建模型元数据,而不是 DataAnnotations。使用这个库,你可以完成你的任务:

Configure(x => x.Payment)
  .Format(() => ConfigurationManager.DataFormatString)
于 2012-12-13T07:53:02.100 回答
1

属性需要常量字符串,你不能改变它。此外,此属性不提供提供资源名称的能力。所以,我认为最好的方法是为这个属性创建DisplayTemplate和 EditorTemplate。

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

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

@model decimal

@Model.ToString(HttpContext.Current.Session["format"].ToString())
于 2012-12-13T06:54:02.427 回答