在 DataFormatString 之外自定义 DisplayFormat
Posted
技术标签:
【中文标题】在 DataFormatString 之外自定义 DisplayFormat【英文标题】:Customizing DisplayFormat beyond DataFormatString 【发布时间】:2013-05-13 13:26:21 【问题描述】:我有一个 MVC 4 项目,我想使用类似于 DisplayFromat
的功能,但设置 DataFormatString
是不够的。我想调用一个函数来格式化字符串。这可能吗?
我已经测试过继承DisplayFormat
,但这只是让我设置DataFormatString
。
我看过自定义 DataAnnotationsModelMetadataProvider
,但我不知道如何让它调用自定义函数进行格式化。
我的特殊情况是我需要将整数 201351 格式化为“w51 2013”。我想不出这样的格式字符串。
【问题讨论】:
【参考方案1】:最简单的方法是在模型上公开一个只读属性:
public class Model
public int mydataget; set;
public string formattedDate
get
string formattedval;
// format here
return formattedval;
;
【讨论】:
在我们的例子中,出于各种原因,我们更愿意使用数据注释进行格式化。【参考方案2】:您可以创建自定义 ValidationAttribute。这是我用来验证某人选择了下拉值的一些代码。
using System.ComponentModel.DataAnnotations;
public sealed class PleaseSelectAttribute : ValidationAttribute
private readonly string _placeholderValue;
public override bool IsValid(object value)
var stringValue = value.ToString();
if (stringValue == _placeholderValue || stringValue == "-1")
ErrorMessage = string.Format("The 0 field is required.", _placeholderValue);
return false;
return true;
public PleaseSelectAttribute(string placeholderValue)
_placeholderValue = placeholderValue;
然后使用它:
[Required]
[Display(Name = "Customer")]
[PleaseSelect("Customer")]
public int CustomerId get; set;
【讨论】:
这不是原始问题的答案以上是关于在 DataFormatString 之外自定义 DisplayFormat的主要内容,如果未能解决你的问题,请参考以下文章