Doit ASP.NET MVC Méthodes de Contrôleur de Retour ActionResult?
Étant nouveau ASP.NET MVC, je me demandais à propos de la signature des méthodes de Contrôleur. Dans tous les exemples que j'ai vu, ils semblent toujours revenir ActionResult, même s'ils reviennent un ViewResult instance ou similaire.
Ici est communément vu l'exemple:
public ActionResult Index()
{
return this.View();
}
Dans ce cas, ne serait-il pas plus logique de déclarer la méthode public ViewResult Index()
, et d'obtenir plus de soutien de type?
L'expérimentation indique que cela fonctionne, il semble donc possible.
Je me rends compte qu'il peut y avoir des situations où le polymorphisme est souhaitée (par exemple, si vous souhaitez rediriger uniquement dans certaines situations, mais afficher une vue dans d'autres situations), mais si la méthode toujours retourne vue, je trouverais une ViewResult plus souhaitable.
En termes de compatibilité future, ActionResult évidemment fiable signature, mais si l'on contrôle l'ensemble de la base de code, il est toujours possible de modifier une signature de la méthode d'une manière plus générale le type de retour si cela devait être nécessaire à l'avenir.
Sont les autres considérations que je ne suis pas au courant, ou devrais-je simplement aller de l'avant et de le déclarer mon contrôleur de méthodes avec des types de retour?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez tout à fait utiliser des types de retour, même si la plupart des exemples sur le web semble de retour de la ActionResult. La seule fois que je serait de retour le ActionResult classe, c'est quand des chemins différents de l'action méthode retourne les différents sous-types.
Steven Sanderson recommande également de retourner des types spécifiques dans son livre Pro ASP.NET Framework MVC. Jetez un oeil à la citation ci-dessous:
"Cette méthode d'action spécifiquement déclare qu'elle renvoie une instance de ViewResult. Il serait fonctionnent de la même façon si, au lieu de la méthode type de retour a été ActionResult (la classe de base de toutes les mesures de résultats). En fait, certains ASP.NET MVC programmeurs de déclarer la totalité de leurs méthodes d'action de retour une non spécifique ActionResult, même si ils savent qu'il retournera toujours un particulier de la sous-classe. Cependant, il est un principe bien établi dans la programmation orientée objet que la méthode doit retourner le plus spécifique de type qu'ils le peuvent, ainsi que l'acceptation la plus générale, les types de paramètre ils le peuvent). Suivant ce principe, maximise le confort et la flexibilité pour le code qui appelle la méthode, tels que des tests unitaires."
Toujours le plus de précision le type, vous pouvez le retourner. Si vous devez retourner un ViewResult lorsque l'action est toujours fait montre d'une vue. Je tiens seulement à utiliser ActionResult lorsque vous revenez dans ViewResult dans certains cas (non valide les données publiées) ou un RedirectToRouteResult dans les autres cas.
Avec quelques avancées actionfilter/l'exécution d'un scénario, vous pouvez même retourner totalement différente de choses qui n'ont rien à voir avec ActionResult.
[Partie]: Vous n'avez pas toujours de retour ActionResult pas. Voici un aperçu rapide de certains des autres résultats, vous pouvez retourner: http://msdn.microsoft.com/en-us/library/dd410269%28v=vs.98%29.aspx
Peut-être que ça vous aidera un peu. Bonne chance!
Oui, vous pouvez définir votre action comme:
public ViewResult Index()
. Mais parfois, votre action peut retourner des résultats différents (il est impossible, sans le déclarer comme résultat de baseActionResult
classe). Par exemple:ou:
ActionResult est la classe de base pour les différents types de retour. Donc, votre action doit retourner un ActionResult ou d'une classe dérivée de il pour travailler. Les communes sont
ViewResult
,JsonResult
, etc.Yep j'ai Sanderson du livre, et j'ai bien aimé la partie sur l'être précis, que c'était quelque chose de contrariant moi quand je regardais le contrôleur d'autres exemples de mesures. Ma philosophie même b4 apprentissage MVC était que, puisque les fonctions (méthodes qui renvoient une valeur) doit être traité comme si vous étiez la déclaration d'une variable/être interchangeables dans le contexte d'une variable/ref du même type, être précis sur le type, comme vous le feriez si la déclaration d'une var (pensez à cela comme voulant éviter defnining toutes vos variables de type "Objet" dans une application plus robuste, mais vous perdez un peu au moment de la conception de la vérification et de sécurité de type). Facilite un contrôleur de test unitaire pour le bon type de retour ainsi.
De référence, découvrez Listkov du Principe de Substitution (le "L" dans le "SOLIDE") aussi.