2012-07-27 23 views
11

我正在尝试访问NancyContextCurrentUser属性。我如何在Razor视图的html中执行此操作?如何从Razor视图中访问Nancy的CurrentUser属性?

如果可能,我将不胜感激代码片段。

感谢

编辑

我现在延长Nancy.ViewEngines.Razor.HtmlHelpers给我用语法糖,保持视图代码简洁可读交叉视角的数据。

这里有几个例子:

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

而从视图中的某些剃刀代码。在这里,我决定仅在用户目前没有通过身份验证时才包含登录弹出窗口(Foundation Reveal)的HTML - 这很有道理。

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

任何理由,你为什么不把做类似它在模型上? – JefClaes 2012-08-06 07:32:17

+1

是的。 CurrentUser信息用于许多视图,但不是全部。因此,将其集中在一个可重复使用的地方会更容易,而不必记住为每个视图设置模型。我发现通过Razor.HtmlHelpers扩展方法提供交叉视图数据更为方便 – biofractal 2012-09-21 15:39:27

回答

11

你可以通过Html属性的RenderContext属性访问NancyContext

样例用法:

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

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

但是,如果你使用的是SuperSimpleViewEngine(感谢@Sean评论),那么你可以使用

@Context.CurrentUser.UserName 
+1

我知道关于Razor视图引擎中Context的相关信息。但是,如果像我这样的人在默认的SuperSimpleViewEngine中寻找如何做到这一点的答案时偶然发现了这篇文章,那么可以使用'@ Context'令牌来做类似的事情。例如'@ Context.CurrentUser.UserName' – ctrlplusb 2014-05-13 11:44:49

相关问题