2

J'ai essayé de faire fonctionner la version fortement typée de RedirectToAction à partir du projet MVC Futures, mais je n'ai obtenu nulle part. Voici les étapes que j'ai suivies et les erreurs que j'ai rencontrées. Toute aide est très appréciée.MVC2 et MVC Futures causant des problèmes RedirectToAction

J'ai créé une nouvelle application MVC2 et modifié l'action À propos du HomeController pour la rediriger vers la page d'index.

Return RedirectToAction("Index") 

Cependant, je voulais utiliser les extensions fortement typés, donc je téléchargé le MVC Futures de CodePlex et a ajouté une référence à Microsoft.Web.Mvc à mon projet.

J'addded la déclaration suivante « importation » en haut de HomeContoller.vb

Imports Microsoft.Web.Mvc 

Je commentais le RedirectToAction ci-dessus et a ajouté la ligne suivante:

Return RedirectToAction(Of HomeController)(Function(c) c.Index()) 

Jusqu'à présent, si bien . Cependant, j'ai remarqué si je décommentez le premier (non générique) RedirectToAction, il a été à l'origine maintenant l'erreur de compilation suivante:

Error 1 Overload resolution failed because no accessible 'RedirectToAction' can be called with these arguments:
Extension method 'Public Function RedirectToAction(Of TController)(action As System.Linq.Expressions.Expression(Of System.Action(Of TController))) As System.Web.Mvc.RedirectToRouteResult' defined in 'Microsoft.Web.Mvc.ControllerExtensions': Data type(s) of the type parameter(s) cannot be >inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
Extension method 'Public Function RedirectToAction(action As System.Linq.Expressions.Expression(Of System.Action(Of HomeController))) As System.Web.Mvc.RedirectToRouteResult' defined in 'Microsoft.Web.Mvc.ControllerExtensions': Value of type 'String' cannot be converted to 'System.Linq.Expressions.Expression(Of System.Action(Of mvc2test1.HomeController))'.

Même si Intelli-sens montrait 8 Surcharges (les 6 originaux surcharges non génériques, plus les deux nouvelles surcharges génériques de l'assemblage Futures), il semble qu'en essayant de respecter le code, le compilateur "ne trouverait" que les deux méthodes d'extension non-génériques du Futures.

Je pensais que cela pourrait être un problème que j'utilisais des versions contradictoires de l'ensemble de MVC2, et l'assemblée à terme, donc j'ajouté MvcDiaganotics.aspx des Futures télécharger sur mon projet et everytyhing avait l'air correct:

ASP .NET Assembly MVC information (System.Web.Mvc.dll)

version Assemblée: ASP.NET MVC 2 RTM (2.0.50217.0)
nom complet: System.Web.Mvc, Version 2.0 = .0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35
base de code : file: /// C: /WINDOWS/assembly/GAC_MSIL/System.Web.Mvc/2.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll
Déploiement: GAC déployé

ASP.NET MVC Futures information de l'Assemblée (Microsoft.Web.Mvc.dll)

version Assemblée: ASP.NET MVC 2 Futures RTM (2.0.50217.0)
nom complet: Microsoft.Web.Mvc , Version = 2.0.0.0, Culture = neutre, PublicKeyToken = null
base de code: Fichier: ///xxxx/bin/Microsoft.Web.Mvc.DLL
Déploiement: bin déployé

Ce qui me rend fou! Parce que je pensais que cela pourrait être un problème VB, j'ai créé un nouveau projet MVC2 en utilisant C# et essayé la même chose que ci-dessus.

j'ajouté ce qui suit « en utilisant » déclaration haut de HomeController.cs

using Microsoft.Web.Mvc; 

Cette fois-ci, dans la méthode d'action A propos, je ne parvenais à appeler le RedirectToAction non générique en tapant la pleine commmand comme suit:

return Microsoft.Web.Mvc.ControllerExtensions.RedirectToAction<HomeController>(this, c => c.Index()); 

Même si j'avais « en utilisant » déclaration au sommet de la classe, si j'ai essayé d'appeler le RedirectToAction non générique comme suit:

return RedirectToAction<HomeController>(c => c.Index()); 

je recevrais l'erreur de compilation suivante:

Error 1 The non-generic method 'System.Web.Mvc.Controller.RedirectToAction(string)' cannot be used with type arguments

Qu'est-ce qui se passe? Ce n'est pas comme si j'essayais de faire quelque chose hors de l'ordinaire. C'est un projet MVC2 vanilla simple avec seulement une référence à l'ensemble Futures. J'espère que j'ai manqué quelque chose d'évident, mais je me gratte la tête depuis trop longtemps, alors j'ai pensé que je chercherais une aide.

Si quelqu'un a réussi à faire fonctionner ce scénario simple (en VB et/ou en C#), pourrait-il me dire ce qu'il a fait différemment?

Merci!

Répondre

3

Essayez d'utiliser:

return this.RedirectToAction<HomeController>(c => c.Index()); 

En utilisant le qualificatif this permet aux méthodes d'extension à utiliser.

+1

Cela a fait l'affaire pour mon projet C# bien. Y a-t-il une raison pour laquelle vous devez utiliser le mot clé "this"? Je pensais que c'était implicite. – Darragh

Questions connexes