J'ai un modèle avec un type complexe, c'est-à-dire utilisateur / adresses / liste des adresses sur ma vue, je affiche ce p> Quel est le moyen approprié d'obtenir l'affichage pour un sous-objet? P> TIA
J p> p>
5 Réponses :
La manière dont vous utilisez n'est-ce pas simple directement à l'aide des noms dans la vue au lieu d'utiliser l'assistant dans ce cas. p> displayNamefor code> est fausse.
Adresses CODE> est une liste et il n'a pas de propriétés telles que
rue code>,
Ville code>,
état code>. Donc, comment vous attendez-vous au nom de s'afficher. P>
Alors, quelle est votre solution?
J'ai changé à p> n'utilise pas Tout fonctionne comme prévu maintenant. P> P> @ html.displaynamefor (m => model.addresses [ 0] .street) code> Parce que si vous devez éditer la première ligne, vous ne pourrez pas cela. P>
Lorsque j'essaie d'utiliser le [0], cela me donne une erreur d'exécution "Impossible d'appliquer une indexation avec [] à une expression de type 'system.data.objects.dataclasses.EntyCollection
Et si les adresses sont vides? Lorsque la directive @model reçoit un
Vous pouvez également utiliser la LINQ pour éviter l'erreur d'indexation. J'ai utilisé ceci est mon code - et l'erreur suivante est parti. P> @Html.DisplayName("Street")
Cela pourrait être meilleur: fonctionnera également au cas où la liste est vide p> p>
Cela n'entraînerait-il pas à un NRE si la liste est vide?
Pour afficher le nom de la propriété Adresse, vous pouvez définir une adresse vide code> modèle code> modèle et l'utiliser comme ceci p>
Essayez d'utiliser un simple
pour code> boucle, au lieu de
foreach code>.
Que se passe-t-il, c'est que vous faites
@ html.displaynamefor (m => modèle.addresses.street.first ()) code>? Je ne fais normalement que taper manuellement les étiquettes.
Je veux utiliser Dataannotations pour les noms. Essayer de toujours garder des chaînes comme ça hors du code.