【问题标题】:Customizing DisplayFormat beyond DataFormatString在 DataFormatString 之外自定义 DisplayFormat
【发布时间】:2013-05-13 13:26:21
【问题描述】:

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

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

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

我的特殊情况是我需要将整数 201351 格式化为“w51 2013”​​。我想不出这样的格式字符串。

【问题讨论】:

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


    【解决方案1】:

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

    public class Model{
        public int mydata{get; 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; }
    

    【讨论】:

    • 这不是原始问题的答案
    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多