2010-10-17 7 views
3

J'ai le modèle et la vue suivants, et j'aimerais beaucoup accepter les valeurs de date au format 'jj/MM/aaaa'. Cependant, malgré l'utilisation de l'annotation DisplayFormat, j'obtiens toujours une erreur de validation en utilisant le format choisi.Problème de format de date personnalisé dans l'application MVC

[MetadataType(typeof(MilestoneMetadata))] 
public partial class Milestone {  
    public class MilestoneMetadata { 
     [Required][DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
     public object Date { get; set; } 
    } 
} 

et la vue:

<div class="editor-field"> 
    <%: Html.EditorFor(model => model.Date) %> 
    <%: Html.ValidationMessageFor(model => model.Date) %> 
</div> 

etc. Namespaces sont corrects pour les annotations et les principales classes d'être dans le même espace. Ce n'est pas ma première rencontre avec ce problème, mais je ne vois aucun résultat d'annotations censées affecter les mappages entre les valeurs de formulaire et le modèle. Un modèle pour les dates ne m'aide pas parce que je ne peux pas trouver un moyen de définir comment les dates sont analysées lors de la publication d'une création ou d'une mise à jour.

REMARQUE:Je ne souhaite pas utiliser une culture d'interface utilisateur différente pour atteindre cet objectif.

Répondre

5

Essayez de régler les uiCulture dans web.config (Si vous le laissez à auto la culture du navigateur client sera utilisé):

<globalization uiCulture="en-US" 
       requestEncoding="utf-8" 
       responseEncoding="utf-8" /> 

Cela forcera en-US le format de culture lorsque le liant modèle par défaut parse valeurs de demande (S'adapter si nécessaire à la culture nécessaire).

Egalement avoir une propriété Date tapée à System.Object n'est pas un très bon design.

+0

Merci Darin, j'ai trouvé que si je mettais la culture à 'en-GB', j'obtiens la bonne gestion de format. Si je le mets à 'en-ZA', je dois utiliser le format 'aaaa/MM/jj'. Mon but réel est de ne pas changer la culture, mais de changer le format de la date. La propriété de type System.Object n'est jamais utilisée. La propriété de date réelle est déclarée en tant que System.DateTime. La propriété 'object' est seulement utilisée pour ses attributs. – ProfK

+0

Dans ce cas, vous devez écrire un classeur de modèle personnalisé et analyser manuellement la chaîne de requête dans un DateTime. –

+0

Ouais, merci. J'ai déjà fait un classeur de modèle pour toutes les valeurs de DateTime, mais cela semble être une longueur extraordinaire pour une tâche comme celle-ci. – ProfK