2009-07-22 31 views
1

Ich habe Code in einer meiner Ansichten, die wie folgt aussieht, wo, wenn Sie angemeldet sind, zeigt es Ihnen die Begrüßung und wenn Sie nicht eingeloggt sind, Es zeigt Ihnen einen Link zur Anmeldeseite.asp.net-mvc Umleiten auf eine neue Seite basierend auf Kriterien

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

, was ich will, ist, dass, wenn Sie nicht angemeldet sind, ich automatisch auf die Login-Seite umleiten möchte (wie, warum hat, dass zusätzlicher Schritt)

irgendwelche Vorschläge, wie ich über gehen würde automatisch von dieser Ansicht auf eine andere Seite umleiten.

Antwort

6

Ihre Ansicht sollte nur für die Anzeige Ihrer Daten verantwortlich sein. Ihr Controller sollte die Umleitungslogik handhaben.

Das Autorisierungsattribut wurde bereits für diesen Zweck erstellt. Fügen Sie es zu Ihrem Controller Aktion-Methode wie:

public class CustomerController : Controller { 

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

} 

Oder alternativ kann es an den Controller hinzugefügt werden, um alle Aktionen anwenden:

[Authorize] 
public class CustomerController : Controller { 

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

} 

Dann in Ihrer web.config gesetzt etwas wie

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

Wenn der Benutzer berechtigt ist, wird Ihnen die Ansicht 'Home' angezeigt. Wenn sie nicht autorisiert sind, werden sie zu '/ Login' umgeleitet.

+0

sagst du, dass ich den Request.IsAuthenticated Code in der Ansicht nicht haben sollte? – leora

+0

Jede Umleitungslogik sollte in den Controller eingefügt werden. Ich würde sagen, dass die Verwendung von 'if (! Request.IsAuthenticated) ... um entweder einen Login-Link oder eine Willkommensnachricht anzuzeigen, in Ihrem Fall in Ordnung ist. Wenn Ihre View jedoch mit einer solchen Anzeigelogik übersät ist, könnten Sie wahrscheinlich von einem Refactoring profitieren. –

+0

Ich bin ein bisschen verloren. . können Sie mir ein Beispiel zeigen, welchen Code Sie in der Steuerung haben würden, wo Sie eine Ansicht zeigen wollten, wenn der Benutzer berechtigt ist, und eine andere Ansicht, wenn sie nicht – leora

2

Das Rad nicht neu erfinden. AuthorizeAttribute führt dies bereits aus. Fügen Sie einfach [Autorisieren] über der Methode hinzu.

+0

Gibt es ein NotAuthorized Attribut – leora

+1

Das AuthorizeAttribute leitet Benutzer um, die NICHT zu einer Login-URL in Ihrer web.config –

+0

Nein. Es wäre trivial, eine zu schreiben, obwohl ich die Verwendung nicht wirklich sehen kann. –

0

Dies ist Programmlogik und sollte daher in der Steuerung sein, nicht in der Ansicht.

Statt return View(); versuchen return RedirectToAction(...); an einen anderen Controller/Aktion mit Parametern in einem schönen „MVC“ Art und Weise passieren, oder return Redirect(...);, wenn Sie nur eine einfache URL verwenden möchten.

+1

aktualisiert Und wie oben erwähnt, wenn Sie sind Umleiten für IsAuthorized, sollten Sie überhaupt nicht weiterleiten - Sie sollten ein Autorisierungsfilter-Attribut verwenden. – David

+1

Dies ist nicht * falsch *, da das AuthorizeAttribute dies grundsätzlich tut, indem es ein HttpUnauthorizedResult zurückgibt, aber ich würde das Attribut verwenden, anstatt es in jeder Aktion zu codieren. – tvanfosson

+0

Ich bin ein bisschen verloren. . Können Sie mir ein Beispiel dafür zeigen, welchen Code Sie im Controller hätten, wenn Sie eine Ansicht anzeigen möchten, wenn der Benutzer berechtigt ist, und eine andere Ansicht, wenn dies nicht der Fall ist? – leora

Verwandte Themen