簡體   English   中英

Umbraco ApplicationEventHandler事件未觸發?

[英]Umbraco ApplicationEventHandler Events not Firing?

我正在創建一個Umbraco網站,允許成員上傳照片。

我被要求創建一個僅列出已上傳照片的成員的頁面。 照片存儲為媒體,並具有關聯的“成員選擇器”屬性。 我試圖根據此字段制定一種獲取成員列表的方法,但是隨着網站的發展,我想出的一切似乎效率很低。

我決定在該成員上創建一個名為“ Number of Photos”的附加屬性。 當他們上傳照片時,數字會增加。 直到我們收到開始發送垃圾郵件的垃圾郵件發送者,它才有效。 在“媒體”部分中刪除照片后,該照片不會自動減少該成員的“照片數量”。 輸入Umbraco的ApplicationEventHandler

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();
            }
        }
    }
}

ApplicationStarted正確觸發。 我遇到的問題是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的較新版本(例如,大約v7.3.0),則應使用:

MediaService.Saved += MediaServiceSaved

您也可以使用此:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM