Macros 如何在Razor宏中获取当前成员

Macros 如何在Razor宏中获取当前成员,macros,umbraco,Macros,Umbraco,我已经在上问过这个问题,但是我想通过在这里发布相同的问题来增加我得到解决方案的机会 我遇到的问题是,在Razor宏中,我无法获取访问站点的当前成员。我尝试过以下方法: 正在调用Member.GetCurrentMember(),但返回NULL 正在调用Membership.GetUser(),但返回NULL 调用UmbracoEnsuredPage.CurrentUser返回NULL 有没有其他方法可以让当前的成员看到上述方法在我的情况下如何不起作用 var m = Membership.G

我已经在上问过这个问题,但是我想通过在这里发布相同的问题来增加我得到解决方案的机会

我遇到的问题是,在Razor宏中,我无法获取访问站点的当前
成员。我尝试过以下方法:

  • 正在调用Member.GetCurrentMember(),但返回NULL
  • 正在调用Membership.GetUser(),但返回NULL
  • 调用UmbracoEnsuredPage.CurrentUser返回NULL
有没有其他方法可以让当前的
成员看到上述方法在我的情况下如何不起作用

var m = Membership.GetUser(); 

这应该行得通,只是我自己在4.7.1中验证了它;如果您不是以成员身份登录,它将返回NULL,但当您登录时,它将满足您的需要。

只需对@E.J.Brennan稍作更改即可。如果NULL是一个问题,您可以在尝试GetUser()之前检查您是否已登录:


从v7开始,您可以使用


现在更容易了,在SurfaceControl中,您可以只使用一行:

var member = ApplicationContext.Current.Services.MemberService.GetById(Members.GetCurrentMemberId());
如果无法访问成员MembershipHElper:

var memberShipHelper = new MembershipHelper(UmbracoContext.Current);
var member = ApplicationContext.Current.Services.MemberService.GetById(memberShipHelper.GetCurrentMemberId());

+1是的,你是对的。我的闪烁会话必须在我没有意识到的情况下被擦除(IIS可能会重新启动)。啊!为那条建议干杯,我从来都不知道那条。+1谢谢你的回答。自从我上次使用Umbraco已经有一段时间了,但如果我再次遇到与会员相关的API问题,我可以把它放在手边。
var member = ApplicationContext.Current.Services.MemberService.GetById(Members.GetCurrentMemberId());
var memberShipHelper = new MembershipHelper(UmbracoContext.Current);
var member = ApplicationContext.Current.Services.MemberService.GetById(memberShipHelper.GetCurrentMemberId());