2010-07-27 100 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