2009-05-21 13 views
3

Ich habe einen Link auf der Seite, die der Benutzer eine bestimmte Aktion ausführen kann, wenn sie angemeldet sind. Wenn sie nicht angemeldet sind, möchte ich den Link, um sie auf die Anmeldeseite zuerst. Das ist ziemlich gewöhnlich. Was ist der beste Weg, dies zu tun? Derzeit mache ich das, aber ich mag es nicht:Umleiten zu Login-Seite Strategie

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

Sie bekommen die Idee. Ich mag es wirklich nicht, Logik in der Ansicht so zu haben. Ist es besser, die "StartPuzzle" -Aktion umleiten zu lassen, wenn Sie nicht eingeloggt sind?

Antwort

2

erstellen HtmlHelpers Erweiterung Methode, die prüft, ob Benutzer authentifiziert und zurückgeben ein Link oder ein anderes ... etwas wie folgt aus:

Ihrer Ansicht:

<%=Html.RenderLoginLink()%> 

und in Ihnen Htmlhelper:

if(autorized) 
{ 
    return Html.ActionLink("Start Puzzle", "StartPuzzle", "Puzzles"); 
} 
else 
{ 
    return Html.ActionLink("Start Puzzle", "Login", "Account"); 
} 
+0

oh yeah, alte Regel von rob conery ist: Wenn du 'if' in deiner Sicht hast, ist das der Platz für htmlhelper :) – Marko

1

So viel Logik in der Ansicht völlig in Ordnung ist, meiner Meinung nach. Aber wenn es mehr als das gibt, oder Sie wollen nicht einmal so viel, dann können Sie zwei separate Ansichten für angemeldete und anonyme Benutzer haben und entscheiden, welche Sie im Controller angezeigt werden. Oder Sie haben eine Ansicht und übergeben abhängig von den Bedingungen den Linktext und die URL vom Controller.

1

Fügen Sie ein "Authorize" -Attribut über die StartPuzzle-Aktion in der Steuerung hinzu. Auf diese Weise wird ein nicht authentifizierter Benutzer automatisch auf die Anmeldeseite umgeleitet, wobei die returnUrl auf den Zugriff zeigt, wenn er/sie nicht eingeloggt war. Auf diese Weise wird er nach erfolgreichen Login (s) zum Puzzle-Start zurückgeleitet .