2012-04-11 4 views
2

Ich möchte eine Seite mit Bedingungen für meine Website implementieren, die erfordert, dass der Benutzer die Nutzungsbedingungen akzeptiert und speichert diesen Wert wahrscheinlich in einem Cookie, damit ich feststellen kann, ob sie akzeptiert und nicht ständig aufgefordert, nicht alle Benutzer haben Konten, so denke ich, ein Cookie ist der Weg dorthin.mvc implementierende Seite, die nur einmal angezeigt wird

Wenn Sie nur versuchen, den besten Weg zu finden, dies zu tun, wäre es am besten mit einem globalen Filter, der vor jeder Aktion auf der Seite ausgeführt wird und auf die Seite mit den Bedingungen umleitet (Speichern der Seite, die angefordert wurde) Der Benutzer ist nicht eingeloggt oder gibt es einen besseren Weg?

+0

Warum nicht eine Sitzung verwenden? Sitzung ["AcceptedTC"] = wahr; Implementieren Sie dann ein Attribut, das die Sitzung überprüft, bevor eine Aktion aufgerufen wird. –

+2

Ein Cookie kann länger als eine Sitzung bestehen bleiben. – ZippyV

+0

Sie haben dann ein Problem, wenn sich die AGB ändern - der Cookie läuft möglicherweise für die nächsten Tage nicht ab und der Nutzer wird nicht bemerken, dass sich die AGB geändert haben. –

Antwort

2

In Aktion Methode, die T & C POST verarbeitet:

Session["AcceptedTC"] = true; 

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class AcceptedTermsCheck : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Check if AcceptedTC is set to true 

     // If set, then do nothing 

     // Otherwise redirect to TC page 
    } 
} 

Grund für die Verwendung eines Attributs, ist, dass Sie vielleicht ein paar Seiten, die Bedingungen und Konditionen nicht Benutzer benötigen zu akzeptieren. Wenn Sie Application_BeginRequest überprüfen, haben Sie diese Flexibilität nicht.

+0

Dies ist ziemlich genau das, was ich dachte, und dann einige Whitelist-Attribut hinzuzufügen, um Aktionen zu markieren, die die Seite nicht wie die Bedingungen Seite selbst zeigen müssen, ich glaube, ich habe etwas Ähnliches mit globalen Autorisierungsfilter –

+0

darüber nachzudenken gesehen Ich werde wahrscheinlich das Profil API für die Markierung verwenden, wenn der Benutzer die AGB schon gesehen hat, wie es für anonyme und angemeldete Benutzer funktioniert –

1

Eine alternative Option ist das Überschreiben der Application_BeginRequest-Methode für die Datei global.asax.

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if(ShouldIShowMessage()) 
    { 
     this.Response.Redirect("RedirectUrl"); 
    } 
} 

private bool ShouldIShowMessage() 
{ 
    // Decision logic here 
} 

EDIT Ive dachte nur, Ihre Entscheidungslogik etwas erfordern ein Cookie, wie sagen würde immer noch zu klären, aber es erspart Controller mit einem Attribut dekorieren oder einen globalen Filter hinzufügen.

Verwandte Themen