2

J'ai essayé de créer un assistant d'affichage qui prend un objet DateTime et renvoie une chaîne. Si l'objet DateTime est égal à un nouveau DateTime (0), la fonction renvoie une chaîne vide. Sinon, renvoyez une chaîne DateTime formatée. Cela fonctionne jusqu'à présent.Fonction d'affichage d'une chaîne DateTime ou d'une chaîne vide

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

Le problème est que je voudrais passer le format ("{0: g}") comme paramètre:

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

Mais il ne fonctionne pas correctement. Si je l'appelle l'aide de mon avis

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

la fonction avec "{0: g}" en tant que paramètre pour "format", je reçois quelque chose comme "{O:.. N Chr}", ce qui est ce que j'attends

+1

est-ce pas 'nouveau DateTime (0)' la même que la statique 'DateTime.MinValue'? Vous pouvez utiliser 'return (dateTime == DateTime.MinValue)? String.Empty: ... 'pour enregistrer la création d'une nouvelle heure pour chaque vérification. – Rup

Répondre

3

La partie {0:} sert à formater les paramètres string.Format - vous voulez juste que le "g" passe dans ToString().

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

Cependant, je vous recommande

  1. faire les comparaisons sur les valeurs DateTime premières - ou si vous ne voulez comparer les chaînes que vous ne construis la chaîne d'affichage une fois et la réutilisation que
  2. vous utilisez le DateTime.MinValue statique pour la comparaison plutôt que de créer un nouveau DateTime chaque fois - ou au moins créer une instance statique à comparer.

à savoir

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

Super !! Ça marche. Merci pour votre solution et l'indice DateTime.MinValue. Il a de meilleures performances et est plus facile à lire :) –

+1

Je suggère également d'utiliser un DateTime nullable (DateTime?) Au lieu de DateTime.MinValue. –

+0

J'ai déjà surchargé la méthode pour un DateTime? paramètre. –