2012-06-23 2 views
3

Je suis novice à l'asp.net mvc3. Il est vraiment déroutant et difficile de modifier le code unique en raison de la convention utilisée dans asp.net mvc3. J'essayais d'afficher seulement Date pour BirthDate au format 5 Sep 1999 à la place qui montre Date et heure.C'est bien dans Edit.cshtml, datepicker est utilisé pour choisir la date et la valeur est enregistrée dans la base de données de seulement date. Mais, j'ai la colonne BirthDate du type de données de La date pas le DateTime et en utilisant @Html.DisplayFor(model => model.BirthDate); dans Details.cshtml montre la date et l'heure. Bien que la recherche dans Google, j'ai trouvé et mettre en œuvre le code suivant pour afficher la date au format désir:utiliser autre au lieu de @ Html.DisplayFor dans asp.net mvc 3 vue du rasoir

@Model.BirthDate.ToString("dd MMM YYYY"); 

et

@Html.DisplayFor(model => model.BirthDate.ToString("dd MMM YYYY")); 

Il donne l'erreur aucune méthode de surcharge prend 1 argument. En outre, je pourrais utiliser comme:

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
pubilc DateTime BirthDate { get; set } 

Depuis, j'ai utilisé la première approche du modèle pour Entity Framework. Où dois-je mettre au-dessus de la propriété DisplayFormat ou ce qui peut être la syntaxe de rasoir pour afficher la date dans le bon sens dans Details.csthml dans mon scénario

Répondre

0

La troisième approche est la meilleure façon selon moi cos

  1. votre modèle de présentation traite de tous les aspects de l'interface utilisateur et votre vue n'a pas de code de mise en forme inutile et redondant, surtout si vous réutilisez la propriété.
  2. Permet le test unitaire
  3. Cohérence entre différentes pages si vous réutilisez le modèle.

Vous pouvez également écrire une méthode d'assistance qui formate la date et l'utilise de manière cohérente dans tous vos modèles de présentation/vue.

public string FormattedDate(this DateTime dateTime) 
{ 
    return dateTime.ToString("dd MMM YYYY"); 
} 
+0

Merci pour la réponse. Je suis totalement nouveau à mvc3 voulez-vous me donner des étapes comment implémenter helper dans mon scénario – CodeManiac

+0

juste créer une classe appelée ViewFormatter/FormatHelper mettre dans les méthodes dont vous avez besoin, puis se référer à cet espace de noms dans votre vue ou modèle – Baz1nga

0

J'aime utiliser une sorte de décorateur modèle pour gérer ce genre de chose. Supposons que votre classe de modèle s'appelle MyModel. Définissez ensuite une classe wrapper comme ceci:

public class MyModelDecorator 
{ 
    public MyModel BaseItem { get; set; } 

    [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
    public DateTime BirthDate { get; set; } 

    public MyModelDecorator(MyModel baseItem) 
    { 
     BaseItem = baseItem; 
    } 
} 

ensuite dans vos vues, vous pouvez faire référence aux propriétés du modèle de base, ou aux propriétés décorées.

@Html.DisplayFor(m => m.BirthDate) 
@Html.DisplayFor(m => m.BaseItem.SomeOtherProperty) 

S'il y a une meilleure solution que celle-ci, je voudrais vraiment entendre ....

+0

ok, ne peut pas obtenir comment utiliser. J'ai créé le dossier Decorator et MyModelDecorator.cs à l'intérieur. Maintenant, dans la vue, j'ai référence à '@model IVRControlPanel.Decorator.MyModelDecorator'. La propriété de ** MyModel ** n'est pas obligatoire, mais la propriété BirthDate est détectée. Ou, je fais mal – CodeManiac

+0

@CodeManiac * MyModel * n'est pas le nom de la propriété dans cet exemple, c'est * BaseItem *. Je peux le nommer comme tu veux. – McGarnagle

+0

Je ne dis pas le nom de la propriété. Ici Dans mon scénario j'ai classe d'utilisateur (comme MyModel) et ai la propriété comme le nom d'utilisateur, email, mot de passe, etc. Qui ne sont pas liés à ma vue – CodeManiac

1

ok, je sais que je suis en réponse à une question posée huit mois avant, mais mon seule l'intention est, cela pourrait être utile à d'autres se référant à cette question à l'avenir.
Je suis également novoice à MVC et j'ai également fait face à un problème similaire où je n'ai besoin d'afficher que la date et non l'heure et le suivi a fonctionné pour moi.

Au lieu de @Html.DisplayFor().Utilisez <span>
Ainsi, pour le cas mentionné en question serait comme ceci:

<span>@String.Format("{0:D}", model.BirthDate)</span> 

Output: Sunday, September 05, 1999 

Non, besoin d'ajouter la classe supplémentaire/fichier pour formattage.

0

Pour toute réponse sumbad utilisateur ASPX aidé mais comment vous le faites:

<%=Html.Enconde(String.Format("{0:D}", item.yourDate))%> 

Hope this helps quelqu'un.

Questions connexes