2012-07-27 12 views
11

Estoy tratando de acceder a la propiedad CurrentUser del NancyContext. ¿Cómo hago esto desde el html de una vista Razor?¿Cómo accedo a la propiedad CurrentUser de Nancy desde una vista Razor?

Le agradecería un fragmento de código si es posible.

Gracias

Editar

que se extienden ahora Nancy.ViewEngines.Razor.HtmlHelpers darme datos cruzada vista con el azúcar sintáctica que mantiene el código de la vista concisa y fácil de leer.

Éstos son algunos ejemplos:

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; 
} 

y algo de código de afeitar desde un punto de vista. Aquí estoy decidiendo incluir el html para una ventana emergente de inicio de sesión (Foundation Reveal) solo si el usuario no está autenticado en ese momento, tiene sentido.

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

Cualquier razón por la que no pone en el modelo? – JefClaes

+1

Sí. La información de CurrentUser se usa en muchas vistas, pero no en todas. Por lo tanto, es más fácil centralizar esto en un único lugar reutilizable en lugar de tener que recordar configurar el modelo para cada vista. Me resulta mucho más conveniente proporcionar datos de vista cruzada a través de los métodos de extensión Razor.HtmlHelpers – biofractal

Respuesta

11

Puede acceder a la NancyContext través de la propiedad de la propiedad HtmlRenderContext.

Un ejemplos de uso:

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

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

Sin embargo, si que está utilizando el SuperSimpleViewEngine (gracias a la observación @Sean), entonces usted puede hacer similar utilizando el

@Context.CurrentUser.UserName 
+1

. Sé esto sobre el contexto dentro de un motor de vista Razor. Pero si alguien, como yo, tropezó con esta publicación mientras buscaba respuestas sobre cómo hacer esto dentro del SuperSimpleViewEngine predeterminado, puede hacer lo mismo con el token '@ Context'. p.ej. '@ Context.CurrentUser.UserName' – ctrlplusb

Cuestiones relacionadas