6
votes

Le modèle maintient-il sa structure lorsque des données sont reçues dans le contrôleur?

Je ne suis pas sûr de savoir si j'ai encadré la question correctement ci-dessus dans le sujet, mais je vais essayer d'expliquer à mon mieux sur la question que j'ai.

J'ai ci-dessous ContactusModel code> qui est un partie de homeviewmodel code>, mieux dise classe de modèle imbriquée dans un seul modèle code> p> xxx pré>

et je reçois ce Modèle code> référé dans homeviewmodel code> comme ci-dessous: p> xxx pré>

maintenant dans index.cshtml code> Voir fermement créer un Vue de formulaire comme ci-dessous: p> xxx pré>

i ajax code> post ci-dessous: p> xxx pré>

et Dans le contrôleur, j'ai essayé de le recevoir comme ci-dessous: p> xxx pré>

pour une raison quelconque, le modèle ci-dessus est toujours null code>. Mais cela fonctionne si je renvoie le modèle code> code> comme homeviewModel modèle code> au lieu de Modèle ContactUndataModel code> dans le paramètre Controller comme ci-dessous: P>

public JsonResult ContactPost(HomeViewModel model)
{
     var name=model.CUDModel.ContactName; //gets value
     /*Fetch the data and save it and return Json*/
     //Model is filled.
}


4 commentaires

Regardez les attributs de noms des entrées dans la source de vue du navigateur - qui vous tira vous-même.


@ haim770 Je n'ai pas essayé ça .. va l'essayer une fois ..


Nom du bien de l'attribut sera une sorte de cudmodel.contactname @IGOR .. Cela a du sens car il est extrait de homebeviewmodel mais gère-t-il la même structure lorsqu'il est affiché. . C'est ce que je suis confondu avec ..


C'est ainsi que cela fonctionne dans mvc ? Je veux dire structure-sage, c'est tel que maintenu dans toute la partie de l'application? @ haim770


3 Réponses :


1
votes

Utilisation de votre navigateur Web, inspectez chaque élément d'entrée DOM. Nom ". MVC mesure automatiquement les propriétés de vos entrées à la classe à l'aide de la propriété "Nom" de l'entrée.

Pour résoudre ce problème, vous pouvez créer un classeur de modèle personnalisé ou créer les entrées à la main, spécifiant la propriété Nom de manière à ce que le classeur de modèle automatique puisse les adapter aux propriétés de votre classe.

Cependant, il n'y a rien de mal à prendre votre action de contrôleur homeviceModel comme argument.

Plus d'informations, trouvé ici .


1 commentaires

Eh bien, votre lien a aidé à comprendre certains concepts, +1 pour cela, mais cela n'a vraiment pas résolu ma question ... J'ai également essayé de donner au nom comme un attribut HTML distinct mais modèle Nommé IT .. J'attendrai un peu plus de temps et de voir que si quelqu'un propose une explication appropriée, sinon ira et acceptera cela comme réponse .. Merci pour votre temps et votre effort ..



1
votes

Votre point de vue indique le type que vous avez référencé dans la vue - @model.models.homeviewmodel - Cudmodel est simplement une propriété de homesviewModel.


4 commentaires

Je comprends cette partie @viperguynaz, mais je suis confondue avec sa structure. Même si le même modèle est rempli, pourquoi ne l'accepte-t-il pas directement?


Parce que votre vue est fortement dactylographiée sous forme de homeviewModel


Il conserve donc sa structure lorsqu'il est affiché, quelles que soient les propriétés consistaient à un modèle de base?


Si votre viewModel était un int - il posterait un int .



4
votes

Eh bien, si votre fichier nom est cudmodel.contactname au lieu de simplement ContactName , le classeur de modèle par défaut ne serait pas Soyez capable de le lier.

Heureusement, vous pouvez utiliser l'attribut [bind] avec préfixe: xxx

voir msdn


1 commentaires

Eh bien, cela a du sens maintenant .. Je veux dire qu'il y a une certaine option pour la surmonter .. N'était pas au courant de Bind beaucoup .. Merci de partager, je vais mettre en œuvre cela et si cela va bien +15 pour vous.. :)