Показать строку формата для пользователя - PullRequest
1 голос
/ 09 декабря 2011

Как мне показать строку формата как есть?

У меня есть свойство, украшенное некоторыми аннотациями данных:

[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 голосов
/ 09 декабря 2011

Я не знаю, как выглядят все ваши строки формата, но если ваши строки формата когда-либо попадают в 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}, и вы хотите, чтобы с ними было что-то особенное.

0 голосов
/ 09 декабря 2011

Я использую замену, это тоже хороший способ. Если вас беспокоит беспорядок в представлении, вы можете поместить его в метод расширения (или даже в метод расширения HTML Helper).

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