2010-11-07 6 views
5

Je passe un objet complexe comme Model au View commeObjet de passage complexe de View au contrôleur: un objet est toujours nul

alt text

mais quand je reçois le modèle de retour de la vue, un objet particulier est toujours null alors que d'autres types complexes sont normalement passés par

alt text

mon avis est la valeur par défaut Edit fortement typées Voir

alt text

Qu'est-ce que je manque?

Le ModelState Erreur dit

La conversion des paramètres de type 'System.String' taper 'Julekalender.Database.CalendarInfo' a échoué car aucun convertisseur de type peut convertir entre ces types.

Pourquoi ne pas Je reçois la même chose pour les autres types? Comment est-il automatiquement converti?


J'ai ajouté 3 champs (comme le modèle T4 n'ajoute pas ce type) mais je reçois encore nulle quand POST ING

Le vert en boîte ci-dessous est le champ

<div class="editor-field"> 
    <%: Html.TextBoxFor(model => model.Calendar.Guid)%> 
</div> 

alt text


Même renommer l'action en

[HttpPost] 
public ActionResult General2(GeneralInfo model) 

donne la même erreur

alt text

Répondre

2

Assurez-vous que lorsque vous utilisez cet assistant il y a des champs d'entrée générés dans la vue pour chaque propriété de l'objet Calendrier de sorte que lorsque vous postez le formulaire, ils seront envoyés à l'action du contrôleur. Je ne suis pas sûr que ce soit le cas (je n'ai pas vérifié si l'assistant le fait pour des objets complexes, je n'ai jamais utilisé cet assistant).

Dans le résultat HTML, vous devriez avoir:

<input type="text" name="Calendar.Prop1" value="prop1 value" /> 
<input type="text" name="Calendar.Prop2" value="prop2 value" /> 
... and so on for each property you expect to get back in the post action 
... of course those could be hidden fields if you don't want them to be editable 

MISE À JOUR:

Le problème vient du fait que vous avez une variable de chaîne appelée calendar dans votre méthode d'action et un objet a une propriété appelée Calendar qui prête à confusion. Essayez de le renommer:

[HttpPost] 
public ActionResult General2(string calendarModel, GeneralInfo model) 

N'oubliez pas non plus de le renommer dans votre vue.

+0

Je l'ai fait pour seulement 3 champs http://www.balexandre.com/temp/2010-11-07_1458.png mais je n'ai toujours pas l'objet, dois-je avoir tous les champs? – balexandre

+0

Non, un seul champ suffit pour instancier l'objet. Ahhhh je vois maintenant. Renommez cette variable 'calendar' dans votre méthode d'action car elle est source de confusion avec la propriété' Calendar'. –

+0

mais c'est mon chemin '' {calendar}/{controller}/{action}/{id} "' pour que je puisse passer un nom de calendrier (donc je sais à quel calendrier appartient toutes les actions) comme 'http: // domain/demo/Content/General2' Je sais qu'il a demandé le contenu général pour Calendar nommé 'demo'. – balexandre

Questions connexes