【发布时间】:2014-03-07 17:31:41
【问题描述】:
我正在创建一个允许会员上传照片的 Umbraco 网站。
我被要求创建一个仅列出已上传照片的成员的页面。照片存储为媒体并具有关联的成员选取器属性。我试图制定一种基于该字段获取成员列表的方法,但是随着站点的增长,我能想到的一切似乎都变得非常低效。
我决定在成员上创建一个名为“照片数量”的附加属性。当他们上传照片时,数字会增加。在我们得到一个开始上传垃圾的垃圾邮件发送者之前,它工作得很好。当照片在媒体部分被删除时,它不会自动减少成员的“照片数量”。输入 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 目录中。
【问题讨论】:
标签: c# event-handling content-management-system umbraco