7
votes

Erreur de NullReference étrange à la recherche de la vue de rendu

Cette erreur est si bizarre, je ne peux tout simplement pas comprendre ce qui est vraiment faux!

dans usermontroller, j'ai xxx

ma vue est de type @model iEnumerable sur le dessus.
C'est ce qui se passe:

text alt

où et quoi EXACTEMENT EST NULL!?

Je crée les utilisateurs à partir d'un faux référentiel avec MOQ . J'ai également écrit des tests d'unité, qui passent pour que la bonne quantité d'utilisateurs moqueurs soit renvoyée.

Peut-être que quelqu'un peut me signaler dans la bonne direction ici? Le haut de la trace de la pile est: xxx

est-ce quelque chose à voir avec Linq ici? Dites-moi si je devrais inclure la trace de la pile complète.


Edit
Wow, je ne peux pas croire que c'était u.usergroupmain.groupname merci @lunivore .
C'était un repo de maquette et j'avais un test unitaire pour vérifier si l'utilisateur de la moqueur de repo avait une instance de l'instance de UserGroupMain, mais je n'ai pas affirmé si la propriété GROUPNAME avait été défini!

merci @ rpm1984 votre suggestion a obtenu le code de casser dans le contrôleur lui-même. De plus, j'ai appris quelque chose de nouveau.

merci @mikael , je suis d'abord utilisé le fenêtre immédiate wow c'est cool! = D

devine que vous vivez, codez et apprenez!


3 commentaires

Lorsque vous déboguez la vue, est modèle null? En outre, qu'est-ce que le modificateur virtuel sur la méthode d'action?


@RPM Nope Model n'est pas nul mais un type long Linq. Je vais mettre une screentie à cela et quelques informations de Mroe bientôt! Je viens de rentrer à la maison!


Pas besoin, voir ma réponse. À peu près sûr que c'est votre problème. Je vais me coucher - va vérifier le matin. :)


3 Réponses :


6
votes

Ouais, ça a eu quelque chose à voir avec Linq. LINQ n'exécute pas la requête avant de l'utiliser. Donc, lorsque vous en boucle, la requête est courante et pour une raison quelconque elle se bloque.

Qu'est-ce que Getall retourner? Une chose que vous pourriez faire est de placer un point d'arrêt à l'intérieur de l'index () et quand il se casse écrire cela dans la fenêtre immédiate. xxx

Si vous ne trouvez pas la fenêtre immédiate peut l'ouvrir en écrivant xxx

dans la boîte de recherche (en haut de VS)

si cela ne plante pas le problème est probablement dans la linq Index intérieur (). D'après ce que je peux voir, je soupçonnerais que U.UserGroupMain ou U.Branch est NULL. Mais difficile à dire sans plus d'informations.


1 commentaires

Je ne savais pas que Linq l'a fait cela non plus. Vraiment, vraiment utile - merci!



5
votes

Changer cette ligne: xxx

à ceci: xxx

pourquoi?

de msdn:

La méthode asénumérable (de Tsource) (iEnumerable (de Tsource)) n'a aucun effet autre que de modifier le type de source de compilation d'un type qui implémente iEnumerable (de T) à iEnumerable (de T). < / p>

en anglais - parce que .asenumerable () convertit sur iEnumerable , mais iquéryable > Déjà implémente ienumerable , la requête n'est donc pas matérialisée - et est en cours d'évaluation paresseusement dans la vue lorsque vous énumérez les éléments du foreach . Astuce classique de Linq différé Exécution différée.

C'est pourquoi j'aime Resharper - il vous dira que l'appel asenumerable () est redondant - alors il deviendra beaucoup plus évident que votre requête est étant différé.

.tolist () va déclencher la requête avant d'atteindre la vue et implémente toujours ienumerable donc votre modèle de liaison ne doit pas changer.


0 commentaires

1
votes

Vérifiez que le usergroupMain code> et branche code> que vous avez mis en place dans vos utilisateurs ne sont pas NULL:

                   UserGroupName = u.UserGroupMain.GroupName,
                   BranchName = u.Branch.BranchName,


2 commentaires

Je ne peux toujours pas croire que j'étais ce Daft! La frustration peut vraiment vous conduire aveugle!


Pas de problème, c'est ce que nous sommes là pour. Big Upvote pour Mikael - J'aurais peut-être résolu le problème, mais c'est une réponse beaucoup plus intéressante!