向用户显示格式字符串

时间:2011-12-09 16:26:52

标签: c# data-annotations string-formatting

如何按原样显示格式字符串?

我有一个用一些数据注释装饰的属性:

[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public blah blah { get; set; }

我现在有一个格式字符串的引用:

string format = metadata.DisplayFormatString; // == {0:MM/dd/yyyy}

我想向用户显示此格式字符串,而无需在我的视图中手动输入。有没有一种很好的方法(不是用空字符串替换字符)从字符串MM/dd/yyyy获取format

2 个答案:

答案 0 :(得分:0)

我使用替换的东西也是一个很好的方式。如果您担心视图中的混乱,可以将其放入扩展方法(甚至是HTML Helper扩展方法)。

public static string ToUserFriendlyDateFormat(this string unfriendlyFormat) {
    return unfriendlyFormat
        .Replace("{0:", string.Empty)
        .Replace("}", string.Empty);
}

答案 1 :(得分:0)

我不知道你的所有格式字符串是什么样的,但是如果你的格式字符串使它成为String.Format()你必须转义{和}字符(通过加倍它们)。如何使用正则表达式。这里有一些简单的开头,它也会使{和}字符加倍:

string DisplayFormat(string format) {
    Regex rx = new Regex(@"\{\d+:([^}]+)}|\{\{|}}");
    return rx.Replace(format, delegate(Match m) {
        if (m.Value == "{{") {
            return "{";
        } else if (m.Value == "}}") {
            return "}";
        } else {
            return m.Groups[1].Value;
        }
    });
}

请注意,如果您的格式字符串包含{0}等序列,则上述代码必须更改,并且您还需要对它们执行特殊操作。