2012-07-27 17 views
11

NancyContext'un CurrentUser özelliğine erişmeye çalışıyorum. Bunu bir Razor görünümündeki html'den nasıl yaparım?Nancy'nin CurrentUser özelliğine Jilet görünümü içinden nasıl erişirim?

Mümkünse bir kod parçacığı için minnettar olurum.

Teşekkür

Düzenleme

şimdi görünümü kod veciz ve okunabilir tutar sözdizimsel şeker ile bana çapraz görüntüleme verilerini vermek Nancy.ViewEngines.Razor.HtmlHelpers uzanır.

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

Ve bir görünümden bazı jilet kodu: Burada

birkaç örnektir. Burada, yalnızca kullanıcı şu anda doğrulanmamışsa, bir Oturum Açma açılır penceresine (Foundation Reveal) html eklemeyi tercih ediyorum - mantıklı.

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

Herhangi bir sebep kullanarak benzer yapabilir modelde mi? – JefClaes

+1

Evet. CurrentUser bilgisi birçok görünümde kullanılır, ancak hepsi değil. Bu nedenle, her bir görünüm için modeli kurmayı hatırlamak zorunda kalmadan, tek bir tekrar kullanılabilir yerde merkezileştirmek daha kolaydır. Ben Razor.HtmlHelpers uzantısı yöntemleri – biofractal

cevap

11

Sen Html Tesisin RenderContext özelliği üzerinden NancyContext erişebilirler.

Örnek bir kullanım: Ancak

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

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

senin SuperSimpleViewEngine (teşekkür @Sean için açıklama) kullanıyorsanız o zaman koymayın neden

@Context.CurrentUser.UserName 
+1

üzerinden çapraz-görüntü verisi sağlamak için çok daha uygun buluyorum Bir Razor görünümü motoru içinde bağlam hakkında biliyorum. Ancak, benim gibi bir kişi, bu yazıya geri döndüğünde, varsayılan SuperSimpleViewEngine içinde nasıl yapılacağına dair yanıtlar ararken, '@ Bağlam 'belirtecini kullanarak da benzer şeyler yapabilirsiniz. Örneğin. '@ Context.CurrentUser.UserName' – ctrlplusb

İlgili konular