8
votes

Comment gérer les entités nulles enfants dans le rasoir MVC

J'ai une vue de rasoir MVC qui compte sur une collection de commandes. Chaque commande a un client, qui peut être null.

problème est, je reçois une exception de référence nulle lorsque ceci est le cas. xxx

@ item.customer.name souffle lorsque l'article.customer est null (comme vous l'attendez).

Ceci doit être une question facile, mais je n'ai pas pu trouver la réponse!

Quel est le meilleur moyen de faire face à cela, sans mettre en place une vue de vie?

merci Duncan


0 commentaires

5 Réponses :


7
votes

Essayez ce qui suit:

<td>        
    @(item.Customer != null ? item.Customer.Name : "")
</td>


2 commentaires

Cela ne fonctionnera pas à l'intérieur d'une vue de rasoir. Si vous le fermez, cela devrait. @ (item.customer! = null? item.customer.name: "")


@ MR-GROK - Merci pour vos commentaires. J'ai écrit cela de la mémoire, mais je vais éditer et mettre à jour mon message pour refléter la syntaxe correcte.



4
votes

Un simple si devrait faire le travail: xxx

ceci étant dit et montré, ce n'est qu'une solution de contournement. La solution réelle consiste à définir et à utiliser un modèle de vue spécifique.


0 commentaires

0
votes
@foreach (var item in Model.Where(item => item.Customer != null))

0 commentaires

2
votes

Vous ne savez pas comment vous accumulez ces objets, mais une autre façon de gérer cela consiste à utiliser le modèle de conception Null Object Ceci supprimerait la nécessité d'avoir un test et de vous permettre de produire du texte significatif pour le nom ("inconnu" "," ", Aucun autre)

http://sourcemaking.com/refactoring/introduce-Null-Object < / p>


0 commentaires

5
votes

Tout d'abord, vous pouvez utiliser HTML Helper HTML.DISPLAYFOR (M => M [I] .CUSTOMER.NAME) CODE> Si vous utilisez pour l'itération au lieu de pourestiner. Mais cela a peu d'inconvénients. Vous n'avez peut-être pas à ne pas avoir la propriété de la collection d'indexeur et la méthode d'affichage pour obtenir un paramètre d'expression et la compilez, ce qui est coûteux.

au lieu d'eux, vous pouvez créer votre propre méthode qui gère ce scénario beaucoup comme ci-dessous. P>

@item.NullSafe(m=>m.Customer.Name)


0 commentaires