Można zmienić typ bazowy strony Razor do jednego z własne np .:
public class UserAwareViewPage : System.Web.Mvc.WebViewPage
{
public IPrincipal User { get { return Thread.CurrentPrincipal; } }
}
a następnie zmodyfikować plik konfiguracyjny tak:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory,
System.Web.Mvc, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="Your.Namespace.UserAwareViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
Phil Haack ma bardzo dobrą blog post on this here.
Można również dodać metodę rozszerzenia do System.Web.Mvc.WebViewPage
(typ podstawowy dla stron maszynki do golenia) i użyć tej opcji.
public static IPrincipal User(this System.Web.Mvc.WebViewPage page)
{
return Thread.CurrentPrincipal;
}
Który byłby użyteczny tak:
@if(Request.IsAuthenticated) {
<text>Signed In As <strong>@User().Identity.Name</strong>
Osobiście wolę pierwsze podejście, ale pomyślałem, że dostarczają drugi alternatywnej opcji.
Pytasz jak to zrobić @User? A może pytasz, jak to zrobić @MyOwnObject? –
Tak, @MyOwnObject. – JaJ