Asp.net mvc 自定义DataFormatString之外的DisplayFormat

Asp.net mvc 自定义DataFormatString之外的DisplayFormat,asp.net-mvc,asp.net-mvc-4,string-formatting,number-formatting,Asp.net Mvc,Asp.net Mvc 4,String Formatting,Number Formatting,我有一个MVC4项目,我想使用类似于DisplayFromat的功能,但是设置DataFormatString是不够的。我想调用一个函数来格式化字符串。可能吗 我已经测试了继承DisplayFormat,但这只允许我设置DataFormatString 我已经研究过自定义数据注释ModelMetadataProvider,但我不知道如何让它调用自定义函数进行格式化 我的特殊情况是需要将整数201351格式化为“w51 2013”。我想不出一个格式字符串可以做到这一点。最简单的方法是在模型上公开只

我有一个MVC4项目,我想使用类似于
DisplayFromat
的功能,但是设置
DataFormatString
是不够的。我想调用一个函数来格式化字符串。可能吗

我已经测试了继承
DisplayFormat
,但这只允许我设置
DataFormatString

我已经研究过自定义
数据注释ModelMetadataProvider
,但我不知道如何让它调用自定义函数进行格式化


我的特殊情况是需要将整数201351格式化为“w51 2013”。我想不出一个格式字符串可以做到这一点。

最简单的方法是在模型上公开只读属性:

public class Model{
    public int mydata{get; set;}
    public string formattedDate{
        get{
            string formattedval;
            // format here
            return formattedval;
        };
    }
}

您可以创建自定义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; }

在我们的例子中,出于各种原因,我们更倾向于使用数据注释进行格式化