在 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的主要内容,如果未能解决你的问题,请参考以下文章

自定义格式日期的 MVC3 不显眼日期验证

自定义格式为“MMMyy”的 Kendo UI Datepicker

日期时间的 DataFormatString

DataFormatString:字段必须是数字

数据集中的 DataFormatString,按代码

自定义形状记录在绘制路径之外的点击