一旦Is Approved标志首次设置为true,我正在努力改变成员属性中的简单true / false标志。我可以更改属性,但不保存/提交值。我已尝试过MemberService.Saved和MemberService.Saving。我对Umbraco很新,所以可能错过了一些明显的东西。
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
MemberService.Saved += MemberService_Saved;
}
void MemberService_Saved(IMemberService sender, Umbraco.Core.Events.SaveEventArgs<IMember> e)
{
foreach (var member in e.SavedEntities)
{
if (!member.IsNewEntity())
{
var dirtyProperties = member.Properties.Where(x => x.WasDirty()).Select(p => p.Alias);
if (dirtyProperties.Contains("umbracoMemberApproved"))
{
if (member.IsApproved && !member.GetValue<bool>("approvalEmailSent"))
{
//Send Email to Customer
//new SmtpClient().Send(mail);
var prop = member.Properties["approvalEmailSent"];
prop.Value = true;
var propValue = member.GetValue<bool>("approvalEmailSent");
//Have verified propValue is now true
sender.Save(member);
}
}
}
}
}
奇怪的是,我可以找到另一个成员,让属性更改并保存好,而不是通过e.SavedEntities发送的成员。
TIA
也许尝试这样做?
member.SetValue("approvalEmailSent", true);
sender.Save(member, false);
在MemberService.Saved中,告诉.Save方法不要引发任何进一步的事件,只是为了确保不会发生无限循环。
这在我看来是某种bug,经过大量调试我发现了以下内容:
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
MemberService.Saved += MemberService_Saved;
}
void MemberService_Saved(IMemberService sender, Umbraco.Core.Events.SaveEventArgs<IMember> e)
{
foreach (var member in e.SavedEntities)
{
if (!member.IsNewEntity())
{
if (member.IsApproved && !member.GetValue<bool>("approvalEmailSent"))
{
member.SetValue("approvalEmailSent", true);
var dirtyProperties = member.Properties.Where(x => x.WasDirty()).Select(p => p.Alias);
if (dirtyProperties.Contains("umbracoMemberApproved"))
{
//Email Customer
//new SmtpClient().Send(mail);
sender.Save(member, false);
}
}
}
}
}