Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Umbraco应用程序venthandler事件未触发?_C#_Event Handling_Content Management System_Umbraco - Fatal编程技术网

C# Umbraco应用程序venthandler事件未触发?

C# Umbraco应用程序venthandler事件未触发?,c#,event-handling,content-management-system,umbraco,C#,Event Handling,Content Management System,Umbraco,我正在创建一个Umbraco网站,允许会员上传照片 我被要求创建一个只列出上传照片的成员的页面。照片存储为媒体,并具有关联的成员选取器属性。我试图制定一种方法来获取基于此领域的成员列表,但随着网站的发展,我所能想到的一切似乎都是非常低效的 我决定在成员上创建一个名为“照片数”的附加属性。当他们上传照片时,数量会增加。它工作得很好,直到我们有一个垃圾邮件发送者开始上传垃圾。在媒体部分删除照片时,不会自动减少成员的“照片数量”。输入Umbraco的应用程序venthandler: using Sys

我正在创建一个Umbraco网站,允许会员上传照片

我被要求创建一个只列出上传照片的成员的页面。照片存储为媒体,并具有关联的成员选取器属性。我试图制定一种方法来获取基于此领域的成员列表,但随着网站的发展,我所能想到的一切似乎都是非常低效的

我决定在成员上创建一个名为“照片数”的附加属性。当他们上传照片时,数量会增加。它工作得很好,直到我们有一个垃圾邮件发送者开始上传垃圾。在媒体部分删除照片时,不会自动减少成员的“照片数量”。输入Umbraco的
应用程序venthandler

using System.Web;
using umbraco.cms.businesslogic;
using umbraco.cms.businesslogic.media;
using umbraco.cms.businesslogic.member;
using Umbraco.Core;

namespace Umbraco.Extensions.EventHandlers
{
    public class RegisterEvents : ApplicationEventHandler
    {
        protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
        {
            Media.AfterMoveToTrash += Media_AfterMoveToTrash;

        }

        private void Media_AfterMoveToTrash(Media sender, MoveToTrashEventArgs e)
        {
            // Reset photo count for user
            if (sender.getProperty("member") != null)
            { 
                int memberId = int.Parse(sender.getProperty("member").Value.ToString());
                var member = new Member(memberId);
                int numPhotos = 0;
                int.TryParse(member.getProperty("numberOfPhotos").Value.ToString(), out numPhotos);
                if (numPhotos > 0)
                    numPhotos--;
                member.getProperty("numberOfPhotos").Value = numPhotos;
                member.Save();
            }
        }
    }
}
应用程序已启动
正确启动。我遇到的问题是,
Media.AfterMoveToTrash
事件从未触发。我还尝试了
Media.AfterDelete
,但没有成功


我不确定这会有什么不同,但我把Umbraco作为一个网站而不是MVC项目来运行。所有自定义代码(表面控制器、模型和此事件处理程序)都位于App_code目录中。

如前所述,使用MediaEvents。以下内容摘自Umbraco网站

using Umbraco.Core; using Umbraco.Core.Events; using Umbraco.Core.Models; using Umbraco.Core.Services; namespace My.Namespace { public class MyEventHandler : ApplicationEventHandler { public MyEventHandler() { MediaService.Saved += MediaServiceSaved; } void MediaServiceSaved(IMediaService sender, SaveEventArgs e) { foreach (var mediaItem in e.SavedEntities) { // Do whatever you want with each entity } } } } 使用Umbraco.Core; 使用Umbraco.Core.Events; 使用Umbraco.Core.Models; 使用Umbraco.Core.Services; 名称空间My.namespace { 公共类MyEventHandler:ApplicationEventHandler { 公共MyEventHandler() { MediaService.Saved+=MediaServiceSaved; } void MediaServiceSaved(IMediaService发件人,SaveEventArgs e) { foreach(e.SavedEntities中的var mediaItem) { //对每个实体执行任何操作 } } } } 更新:如果您使用的是较新版本的Umbraco(例如大约v7.3.0),则应使用:

MediaService.Saved += MediaServiceSaved MediaService.Saved+=MediaServiceSaved 此外,您还可以使用:

public class UmbracoActionsHandler : IApplicationStartupHandler
    {
        public UmbracoActionsHandler()
        {
            Media.AfterMoveToTrash += Media_AfterMoveToTrash;
        }

        void Media_AfterMoveToTrash(Media sender, umbraco.cms.businesslogic.MoveToTrashEventArgs e)
        {
            ......
        }
    }

IApplicationStartupHandler现在已过时。相反,请使用IAApplicationEventHandler或ApplicationEventHandler。应在较新的MediaService上订阅事件,不是旧的媒体类。此处列出了Umbraco 7的MediaService事件:-注意:大多数(如果不是全部的话)服务事件可以引用多个实体进行批处理操作。我使用了MediaService。保存成功。现在我尝试使用MediaService.Deleted/MediaService.Deleting,因为我也想从磁盘上删除文件。但这些事件都没有发生。有人知道为什么吗?