假设我有一个类似下面的注释
[DisplayFormat(DataFormatString = "{0:#.00#}", ApplyFormatInEditMode = true)]
效果很好。但是假设我想要实时替换DataFormatString,有时像{0:#。00#},有时候{0:#。000#},基于用户选择的一些应用程序设置。有没有办法做到这一点?
我尝试将格式字符串存储在全局变量中,但它给出了以下错误。
属性参数必须是常量表达式,typeof表达式 或属性参数类型
的数组创建表达式
如果我使全局变量保持不变,那么它的工作原理会失败。有关解决方案的任何建议吗?
基本上我想给用户一个选项来普遍设置小数空间,而不必在每个视图/控制器的基础上实现该功能。
我知道我可以使用NumberFormat.CurrencyDecimalDigits来放置文化。但这会忽略小数点后的零。
答案 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)