2010-01-04 6 views
0

Je reçois le InvalidOperationException suivant:MVC2: Impossible de convertir la chaîne à ExtensionDataObject (sans savoir que je voulais)

The parameter conversion from type 'System.String' to type 'System.Runtime.Serialization.ExtensionDataObject' failed because no type converter can convert between these types. 

Dans une action post sur ma page ASP.Net MVC2, mais je suis Je ne sais vraiment pas à quoi cela fait référence. J'utilise la validation d'annotation de données:

public class FamilyPersonMetadata 
{ 
    [Required(ErrorMessage = "Name Required")] 
    public String Name; 

    [Required(ErrorMessage = "Date of Birth required")] 
    [DateTime(ErrorMessage = "Invalid Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d")] 
    public DateTime DateOfBirth; 
} 

[MetadataType(typeof(FamilyPersonMetadata))] 
public partial class FamilyPerson 
{ 
} 

Et moi inhertis d'un ViewPage avec un sous-type de FamilyPerson. Je viens de créer des contrôles avec des noms correspondant à ceux de FamilyPerson puis soumettre le formulaire, mais pour une raison quelconque mon ModelState est invalide et l'erreur ci-dessus est apparemment la raison. Je suis assez perplexe quant à la nature de l'erreur. Le code similaire fonctionne pour d'autres vues et actions.

Quelqu'un pourrait-il me diriger dans la direction des choses à regarder qui pourrait être la cause?

+0

Est-ce que tout fonctionne? Il serait utile d'essayer d'éliminer certaines variables de ce problème. – Eilon

Répondre

0

Il semble avoir disparu de lui-même. Bizarre.

2

En ce qui concerne [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d")]

"{0:d" devrait être "{0:d}"

+0

Bonne prise. Malheureusement, j'ai toujours la même exception après ce changement. –

0

Cela peut aider quelqu'un:

J'ai eu cette exception d'être jeté parce que j'avais formes mulitiple à mon avis.

Cependant, une des formes ne définissez pas explicitement l'attribut « action ». C'est, j'utilisais ce constructeur:

@using (Html.BeginForm()) 

au lieu de celui-ci:

@using (Html.BeginForm("ACTION_METHOD", "CONTROLLER", FormMethod.Post, null)) 

Cela se traduirait par des paramètres incorrects étant affiché avec le formulaire. Spécifiquement, l'objet de modèle métier était inclus dans le formulaire alors qu'il ne devrait pas l'être. À son tour, .Net a ensuite essayé de convertir un System.String à un objet modèle d'affaires quand il ne devrait pas essayer une telle conversion.

La solution consiste à utiliser la méthode surchargée par la suite et à vous assurer que l'attribut 'action' correct est défini pour votre formulaire lors de la publication. FYI: Pour inspecter l'attribut 'action' de votre formulaire, utilisez FireBug et inspectez le HTML, trouvez l'élément Form et l'attribut 'action' sera là avec tous les paramètres qui seront retournés au serveur quand ce formulaire est soumis. Que se passe-t-il si vous commentez l'attribut MetadataType?