2010-11-05 5 views
2

J'ai obtenu cette ligne de code d'un livre. Je ne comprends pas comment quelqu'un pourrait savoir que controller.List().ViewData.Model pourrait être classé comme IList ??IList type question cast

var people = controller.List().ViewData.Model as IList<Person>; 

Répondre

1

Ce que vous avez est un appel à un contrôleur ASP.NET MVC, mais au lieu de l'utiliser pour afficher une vue, vous accédez directement à ViewData.

Typiquement dans ASP.NET MVC vous allez créer une vue typée pour vos vues qui héritera de System.Web.Mvc.ViewPage<T> et dans ce cas ce sera System.Web.Mvc.ViewPage<IList<Person>>. Une fois que vous avez créé cette vue typée, dans la vue, vous savez que ViewData.Model est de type IList<Person>.

Les appels comme celui que vous avez posté sont couramment utilisés dans les tests unitaires des contrôleurs. Dans ce cas, vous appelez directement la méthode du contrôleur et récupérez le ViewResult qui contient les données. Lorsque vous écrivez le test unitaire, vous savez que ViewData.Model est de type IList<Person> parce que c'est le contrat - c'est à cela que sert le test unitaire, pour vérifier que le contrôleur a généré un modèle du bon type et qu'il a les bonnes données.

1

Vous devez connaître le modèle d'objet, dans la plupart des cas, vous êtes familier avec le cadre que vous utilisez et l'IDE propose de nombreux outils utiles pour aider à l'enquête de l'objet.