2010-07-27 80 views
2

我试图创建一个视图助手,它需要一个DateTime对象并返回一个字符串。如果DateTime对象等于新的DateTime(0),则该函数返回一个空字符串。否则,返回格式化的DateTime字符串。这工作到目前为止。显示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:克}”)作为参数:

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:绿}”的参数“格式”,我得到的东西,如“{○:... N人权委员会}”,这是不我期望的内容

+1

是不是'新的DateTime(0)'一样的静态'DateTime.MinValue'?你可以使用'return(dateTime == DateTime.MinValue)? String.Empty:...'保存为每次检查创建一个新的时间。 – Rup 2010-07-27 09:41:59

回答

3

{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); 
} 
+0

太棒了!有用。感谢您的解决方案和DateTime.MinValue提示。它有更好的性能,更容易阅读:) – 2010-07-27 10:04:07

+1

我也建议使用可空的DateTime(DateTime?)而不是DateTime.MinValue。 – 2010-07-27 16:27:40

+0

我确实已经重载了DateTime的方法吗?参数。 – 2010-07-27 20:36:54