È possibile modificare il tipo di base di una pagina Razor ad uno dei il tuo esempio:
public class UserAwareViewPage : System.Web.Mvc.WebViewPage
{
public IPrincipal User { get { return Thread.CurrentPrincipal; } }
}
e quindi modificare il file di configurazione in questo modo:
<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 ha un ottimo blog post on this here.
In alternativa, è possibile aggiungere un metodo di estensione per System.Web.Mvc.WebViewPage
(tipo di base per le pagine di rasoio) e utilizzare questa.
public static IPrincipal User(this System.Web.Mvc.WebViewPage page)
{
return Thread.CurrentPrincipal;
}
Che sarebbe utilizzabile in questo modo:
@if(Request.IsAuthenticated) {
<text>Signed In As <strong>@User().Identity.Name</strong>
Personalmente, preferisco il primo approccio, ma ho pensato di fornire il secondo per un'opzione alternativa.
fonte
2011-12-20 17:51:04
Stai chiedendo come fare @User? O stai chiedendo come si fa @MyOwnObject? –
Sì, @MyOwnObject. – JaJ