2009-12-23 5 views

Répondre

4

Cet ressemble perversion MVC si vous impossible procédez redirection dans contrôleur, votre logiques ne correct.

Cependant, voici ce que j'utiliser si je n'ai pas accès au contrôleur pour une raison quelconque:

<meta http-equiv="refresh" content='0;url=<%=Html.Action("MyAction","MyController") %>'> 

Mise à jour

Dans votre commentaire, vous l'avez mentionné est parce que vous » re faire la vérification des rôles et vous ne voulez pas faire cela dans chaque contrôleur/action. Si c'est le cas, alors voici quelque chose que vous pourriez envisager:

Créer une classe de contrôleur de base et faire en sorte que chaque contrôleur s'étende de cette classe.

Dans votre contrôleur de base, utilisez une méthode OnActionExecuting. Ici, vous avez quelque chose comme ceci:

public class MyBaseController : Controller 
{ 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
    base.OnActionExecuting(filterContext); 
    if (/*the user is not in the role desired*/) 
    { 
     RedirectToRoute(filterContext, new { controller = "MyController", action = "MyAction"}); 
    } 
    } 

    private void RedirectToRoute(ActionExecutingContext context, object routeValues) 
    { 
    var rc = new RequestContext(context.HttpContext, context.RouteData); 
    string url = RouteTable.Routes.GetVirtualPath(rc, new RouteValueDictionary(routeValues)).VirtualPath; 
    context.HttpContext.Response.Redirect(url, true); 
    } 
} 
+0

c'est une vérification de rôle et je ne veux pas le coder dans chaque action quand je peux le faire dans ma page maître et en finir avec ça – BigOmega

+0

Okay. Eh bien, j'ai mis à jour le meta tag pour afficher un Html.Action. Cela devrait faire tout ce dont vous avez besoin. –

+0

Ah, donc je vais devoir ajouter ceci au Je ne peux pas le faire n'importe où dans la vue? n'y a-t-il pas un moyen? Je suppose que le HTML est ce qu'il est, merci – BigOmega

0

Votre meilleure option serait probablement de déplacer le conditionnel vers votre contrôleur et d'y effectuer la redirection (ceci rend également la logique de redirection facile à tester). Alternative vous pourriez envelopper présentation JavaScript avec côté serveur votre Voir conditionnelle façon:

<% if (viewShouldRedirect) { %> 
    <script type="text/javascript"> 
     window.location = "/Your/New/Url"; 
    </script> 
<% } %> 
+0

Oui, cela fonctionnerait. Bien que si l'utilisateur a JS désactivé (NoScript ou wotnot), cela ne fonctionnerait pas. –

+0

+1 pour déplacer la logique vers le contrôleur. Aucune raison de rendre même la vue au navigateur si vous ne faites que rediriger. – tvanfosson

+0

Oui JS ne volera pas parce que s'ils ne l'ont pas alors ils peuvent toujours entrer, l'idée est de vérifier le rôle dans ma page Maître ... si je le fais ailleurs je devrai coder dans chaque Action .. . et rappelez-vous de le faire dans tous à partir de maintenant, espérait une balle d'argent en mettant le chèque/rediriger dans la page maître. – BigOmega

Questions connexes