2009-05-21 8 views
3

J'ai un lien sur la page qui permet à l'utilisateur d'effectuer une action si elles sont enregistrées. Si elles ne sont pas connectés, je veux le lien pour les diriger vers la page de connexion en premier. C'est assez commun. Quelle est la meilleure façon de faire cela? Actuellement je le fais mais je ne l'aime pas:Rediriger pour ouvrir une session stratégie page

<% if(Model.IsUserAuthenticated){ %> 
<%= Html.ActionLink("Start Puzzle", "StartPuzzle", "Puzzles")%> 
<%} else { %> 
<%= Html.ActionLink("Start Puzzle", "Login", "Account")%> 
<%} %> 

Vous avez l'idée. Je n'aime pas vraiment avoir de la logique dans la vue comme ça. Est-il préférable de simplement rediriger l'action "StartPuzzle" si elle n'est pas connectée?

Répondre

2

créer htmlhelpers méthode d'extension qui va vérifier si l'utilisateur est authentifié et retourner un lien ou d'une autre ... quelque chose comme ceci:

à votre avis:

<%=Html.RenderLoginLink()%> 

et vous HtmlHelper:

si vous avez « si » à votre avis thats la place pour HtmlHelper :):
if(autorized) 
{ 
    return Html.ActionLink("Start Puzzle", "StartPuzzle", "Puzzles"); 
} 
else 
{ 
    return Html.ActionLink("Start Puzzle", "Login", "Account"); 
} 
+0

oh ouais, vieille règle de voler Conery est – Marko

1

Ce bien logique dans la vue est parfaitement bien, l'OMI. Mais s'il y a plus que cela, ou vous ne voulez même pas beaucoup, alors vous pouvez avoir deux vues distinctes pour les utilisateurs connectés et anonymes et de décider lequel vous êtes show va dans le contrôleur. Ou avoir une vue et transmettre le texte du lien et l'URL du contrôleur en fonction des conditions.

1

Mettez un attribut « Autorisez » au-dessus de l'action StartPuzzle dans le contrôleur. De cette façon, un utilisateur non authentifié sera automatiquement redirigé vers la page de connexion ayant la returnUrl a ce consulté quand (s) il n'a pas été connecté. De cette façon, après une connexion réussie (s) il sera redirigé vers le début de puzzle .

Questions connexes