Функция для отображения строки DateTime или пустой строки - PullRequest
2 голосов
/ 27 июля 2010

Я попытался создать помощник вида, который принимает объект DateTime и возвращает строку. Если объект DateTime равен новому DateTime (0), функция возвращает пустую строку. В противном случае вернуть отформатированную строку DateTime. Это работает до сих пор.

public static string DateTimeOrEmpty(this HtmlHelper htmlHelper, DateTime dateTime)
{
    return dateTime.ToString().Equals(new DateTime(0).ToString()) 
        ? String.Empty 
        : dateTime.ToString("{0:g}");
}

Проблема в том, что я хотел бы передать формат ("{0: g}") в качестве параметра:

public static string DateTimeOrEmpty(this HtmlHelper htmlHelper, DateTime dateTime, string format)
{
    return dateTime.ToString().Equals(new DateTime(0).ToString()) 
        ? String.Empty 
        : dateTime.ToString(format);
}

Но это не работает должным образом. Если я позвоню помощнику с моей точки зрения

<%: Html.DateTimeOrEmpty(Model.StopDate, "{0:g}") %>

функция с "{0: g}" в качестве параметра для "format", я получаю что-то вроде "{O: n. Chr.}", Что не соответствует ожиданиям

1 Ответ

3 голосов
/ 27 июля 2010

Часть {0:} предназначена для форматирования string.Format параметров - вы просто хотите, чтобы "g" передавался в ToString ().

<%: Html.DateTimeOrEmpty(Model.StopDate, "g") %>

Однако я бы порекомендовал вам

  1. выполните сравнения с необработанными значениями DateTime - или, если вы хотите сравнить строки, вы строите отображаемую строку только один раз и повторно используете
  2. , вы используете статический DateTime.MinValue для сравнениявместо того, чтобы каждый раз создавать новый DateTime - или, по крайней мере, создать один статический экземпляр для сравнения.

т.е.

public static string DateTimeOrEmpty(this HtmlHelper htmlHelper, DateTime dateTime, string format)
{
    return (dateTime == DateTime.MinValue)
        ? String.Empty 
        : dateTime.ToString(format);
}
...