2009-05-12 6 views
2

J'ai un contrôleur avec que je veux passer certaines données à une vue.Du contrôleur, appliquer le paramètre requis sur une vue MVC fortement typée?

La vue est fortement typé comme:

System.Web.Mvc.ViewPage<SomeObject> 

Maintenant, quand j'appelle ce qui suit dans le contrôleur:

return View("SomeAction", someObject); 

je le veux faire valoir que je dois passer dans « someObject ».

Par exemple. Je veux que le suivant à l'échec et ne compilera pas:

View("SomeAction"); 

Peu importe, l'objet attendu doit toujours être passé à la vue. Est-ce possible ou suis-je totalement hors de la base?

Répondre

1

Je voudrais juste écrire un test pour ce cas et ne prenez pas la peine pour le reste:

var actual = controllerUnderTest.Action() as ViewResult; 
Assert.IsNotNull(actual.ViewData.Model); 
Assert.IsInstanceOfType(actual.ViewData.Model, typeof(SomeObject)); 
+0

je préférerais que le compilateur ramasser et peut-être même l'IntelliSense pour aider les autres au lieu d'attendre pour le test cas à courir pour trouver les erreurs. C'est l'essentiel de ce que j'essaie d'obtenir de la question. – Kelsey

+3

Tant que votre contrôleur dérive de System.Web.Mvc.Controller, rien (au moment de la compilation) ne pourrait empêcher les développeurs d'appeler la méthode Controller.View ("abc") et de ne PAS passer un modèle. Ce que vous pouvez faire à la place est que votre action renvoie un CustomViewResult au lieu de ActionResult. Ce CustomViewResult peut dériver de ViewResult et "appliquer" un modèle dans un constructeur public que vous définissez. –

Questions connexes