2009-07-22 6 views
1

J'ai un code dans l'une de mes vues qui ressemble à ceci ci-dessous où si vous êtes connecté, il vous montre l'avis de bienvenue et si vous n'êtes pas connecté, il vous montre un lien vers la page d'ouverture de session.asp.net-mvc rediriger vers une nouvelle page en fonction des critères

<% 
     if (!Request.IsAuthenticated) 
     { 
    %> 
    <%= Html.ActionLink("Log On", "LogOn", "Account")%> 
<% 
    } 
     else 
     { 
      %> 
      <img src="../images/newspic.gif" width="423" height="194"><br /><br /> 
<% 
     } 
%> 

ce que je veux est que si vous n'êtes pas connecté, je voudrais à rediriger vers la page de connexion automatiquement (comme pourquoi avoir cette étape supplémentaire)

des suggestions sur la façon dont je voudrais aller sur rediriger automatiquement vers une autre page à partir de cette vue ci-dessus.

Répondre

6

Votre View ne devrait être responsable que de l'affichage de vos données. Votre contrôleur doit gérer la logique de redirection.

L'attribut d'autorisation a déjà été créé à cette fin. Ajoutez à votre méthode d'action du contrôleur comme:

public class CustomerController : Controller { 

    [Authorize] 
    public ActionResult Home() { 
    return View("Home"); 
    } 

} 

Ou bien il peut être ajouté au contrôleur à appliquer à toutes les actions:

[Authorize] 
public class CustomerController : Controller { 

    public ActionResult Home() { 
    return View("Home"); 
    } 

} 

Ensuite, dans votre jeu quelque chose comme web.config

<authentication mode="Forms"> 
    <forms loginUrl="~/Login" /> 
</authentication> 

Si l'utilisateur est autorisé, votre vue 'Accueil' s'affichera. S'ils ne sont pas autorisés, ils seront redirigés vers '/ Login'

+0

dites-vous que je ne devrais pas avoir le code Request.IsAuthenticated dans la vue? – leora

+0

Toute logique de redirection doit être placée dans le contrôleur. Je dirais qu'utiliser 'if (! Request.IsAuthenticated) ... pour afficher un lien de connexion ou un message de bienvenue est correct dans votre cas. Cependant, si votre View devient jonchée de logique d'affichage comme celle-ci, vous pourriez probablement bénéficier d'un refactoring. –

+0

Je suis un peu perdu. . pouvez-vous me montrer un exemple de code que vous auriez dans le contrôleur où vous vouliez montrer une vue si l'utilisateur est autorisé et une autre vue si elles ne sont pas – leora

2

Ne pas réinventer la roue. AuthorizeAttribute le fait déjà. Ajoutez simplement [Authorize] au-dessus de la méthode.

+0

Attribut NotAuthorized – leora

+1

AuthorizeAttribute redirigera les utilisateurs qui ne sont pas autorisés dans une URL de connexion spécifiée dans votre fichier web.config –

+0

Non. Il serait trivial d'en écrire un, même si je ne vois pas vraiment l'utilisation. –

0

Ceci est une logique de programme, et devrait donc être dans le contrôleur, pas dans la vue.

Au lieu de return View(); essayer return RedirectToAction(...); de passer à un autre contrôleur/action avec des paramètres d'une manière agréable « MVC », ou return Redirect(...); si vous voulez juste utiliser une simple URL.

+1

Et comme indiqué ci-dessus, si vous êtes redirection pour IsAuthorized, vous ne devriez pas rediriger du tout - vous devriez utiliser un attribut de filtre d'autorisation. – David

+1

Ce n'est pas * faux * car AuthorizeAttribute le fait en retournant un HttpUnauthorizedResult, mais j'utiliserais l'attribut au lieu de le coder dans chaque action. – tvanfosson

+0

Je suis un peu perdu. . pouvez-vous me montrer un exemple de code que vous auriez dans le contrôleur où vous vouliez afficher une vue si l'utilisateur est autorisé et une autre vue si elles ne sont pas – leora

Questions connexes