2008-09-21 9 views
4

J'ai du code dans un IAuthorizationFilter qui redirige l'utilisateur vers une page de connexion mais j'ai du mal à changer le contrôleur qui est utilisé. Je pourrais donc faireRediriger vers un autre contrôleur

public void OnAuthorization(AuthorizationContext context) 
{ 
    UserController u = new UserController(); 
    context.Result = u.Login(); 
    context.Cancel = true; 
} 

Mais cela se traduit par

The view 'Login' or its master could not be found. The following locations were searched: 
~/Views/Product/Login.aspx 
~/Views/Product/Login.ascx 
~/Views/Shared/Login.aspx 
~/Views/Shared/Login.ascx 

Je courais ce à partir d'un controleur de produit. Comment puis-je obtenir le moteur de vue pour utiliser le contrôle utilisateur plutôt que le contrôleur de produit?


Edit: Je l'ai travailler avec

RedirectResult r = new RedirectResult("../User.aspx/Login"); 
context.Result = r; 
context.Cancel = true; 

Mais c'est un cludge, je suis sûr qu'il ya une meilleure façon. Il est frustrant peu exposé dans le ActionFilterAttribute. On dirait qu'il pourrait être utile si le contrôleur exposé dans AuthorizationContext avait RedirectToAction exposé ce serait facile.

+1

Ceci devrait l'expliquer: [Astuce ASP.NET MVC# 2 - Rediriger vers une autre action et lui transmettre des informations] [1] [1]: http: //weblogs.asp.net/mikebosch/archive/2008/ 02/02/asp-net-mvc-tip-2-rediriger-à-une-autre-action-et-passer-des-informations-à-it.aspx – ddc0660

Répondre

2

D'accord avec ddc0660, vous devriez rediriger. N'utilisez pas u.Login(), mais définissez plutôt context.Result à RedirectResult.

Questions connexes