2012-07-27 49 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

相關問題