2012-07-27 6 views
11

Ich versuche, auf die CurrentUser Eigenschaft der NancyContext zuzugreifen. Wie mache ich das aus dem HTML einer Razor-Ansicht heraus?Wie kann ich in einer Razor-Ansicht auf die CurrentUser-Eigenschaft von Nancy zugreifen?

Ich wäre dankbar für ein Code-Snippet, wenn möglich.

Dank

bearbeiten

erweitere ich jetzt Nancy.ViewEngines.Razor.HtmlHelpers mir mit syntaktischem Zucker Quer Ansicht Daten zu geben, die die Ansicht Code kurz und bündig und lesbar halten.

Hier sind ein paar Beispiele:

public static bool IsRegistered<T>(this HtmlHelpers<T> html) 
{ 
    var user = GetUser(html); 
    return user != null && user.IsRegistered; 
} 

public static bool IsAuthenticated<T>(this HtmlHelpers<T> html) 
{ 
    return GetUser(html) != null; 
} 

public static User GetUser<T>(this HtmlHelpers<T> html) 
{ 
    return (User)html.RenderContext.Context.CurrentUser; 
} 

Und einige Rasierer Code aus einer Ansicht. Hier entscheide ich mich, den HTML-Code für ein Anmelde-Popup (Foundation Reveal) nur dann einzuschließen, wenn der Benutzer gerade nicht authentifiziert ist - sinnvoll.

@if (!Html.IsAuthenticated()) 
{ 
    Html.Partial("Reveals/SignInReveal"); 
} 
+0

Gibt es Gründe, warum Sie nicht setzen es auf dem Modell? – JefClaes

+1

Ja. Die CurrentUser-Info wird für viele Ansichten verwendet, aber nicht für alle. Daher ist es einfacher, dieses an einem einzigen wiederverwendbaren Ort zu zentralisieren, anstatt sich daran zu erinnern, das Modell für jede einzelne Ansicht einzurichten. Ich finde es viel bequemer, Queransicht Daten über Razor.HtmlHelpers Erweiterungsmethoden – biofractal

Antwort

11

können Sie die NancyContext durch die HtmlRenderContext Eigentum Eigentum zugreifen.

Eine Probe Nutzung:

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> 

<p>Current User: @Html.RenderContext.Context.CurrentUser </p> 

Allerdings, wenn Ihr das SuperSimpleViewEngine (dank der Kommentar @Sean) verwenden, dann können Sie ähnliche tun mit dem

@Context.CurrentUser.UserName 
+1

Ich weiß dies über Kontext innerhalb einer Razor-View-Engine. Aber wenn jemand wie ich selbst auf diesen Beitrag gestoßen ist und nach Antworten darauf gesucht hat, wie man das in der Standard-SuperSimpleViewEngine macht, können Sie das mit dem '@ Context'-Token tun. z.B. '@ Context.CurrentUser.UserName' – ctrlplusb