问题 如何从Razor视图中访问Nancy的CurrentUser属性?


我正试图访问 CurrentUser 的财产 NancyContext。如何在Razor视图的html中执行此操作?

如果可能的话,我会很感激代码片段。

谢谢

编辑

我现在延伸 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");
}  

7140
2017-07-27 13:12


起源

你没有把它放在模型上的任何理由? - JefClaes
是。 CurrentUser信息用于许多视图,但不是全部。因此,将其集中在一个可重复使用的位置更容易,而不必记住为每个视图设置模型。我发现通过Razor.HtmlHelpers扩展方法提供跨视图数据会更方便 - biofractal


答案:


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

样本用法:

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

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

但是,如果您正在使用SuperSimpleViewEngine(感谢评论 @Sean)然后你可以使用

@Context.CurrentUser.UserName

11
2017-07-27 13:25



我在Razor视图引擎中了解了Context。但是,如果有人像我一样偶然发现这篇文章,同时在默认的SuperSimpleViewEngine中寻找如何做到这一点的答案,你可以使用 @Context 令牌。例如 @Context.CurrentUser.UserName - ctrlplusb