自定义DataFormatString之外的DisplayFormat

时间:2013-05-13 13:26:21

标签: asp.net-mvc asp.net-mvc-4 string-formatting number-formatting

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

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

我看过自定义DataAnnotationsModelMetadataProvider,但我不知道如何让它调用自定义函数进行格式化。

我的具体情况是我需要将整数201351格式化为" w51 2013"。我无法想出那样做的格式字符串。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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