MVC 中的自动邮件 ASP.NET

本文关键字:ASP NET MVC | 更新日期: 2023-09-27 18:34:57

当某些预订发生变化时,我希望每个参与其中的人都能收到有关更改的邮件。

实际上,我不确定如何完成此操作。但我认为我的第一个问题应该是。我应该如何检查更改是否一致,我应该如何知道哪些人参与了更改?

我在 MVC 3 中使用实体框架(延迟加载(。

MVC 中的自动邮件 ASP.NET

deltu,

这可以通过多种方式解决。 我今天使用的那个是基于在存储库保存更改时引发事件。 不确定您的配置是什么样子的,但这是我所做的一个片段:

public void SaveChanges()
{
    //_auditDate = DateTime.Now; ignore this in your case
    OnSavingChanges();
    _context.SaveChanges();
    OnSavedChanges();
}
private void OnSavingChanges()
{
    if (SavingChanges != null)
    {
        var eventArgs = new RepositorySavingChangesEventArgs()
        {
            AuditDate = _auditDate
        };
        SavingChanges(this, eventArgs);
    }
}
public event EventHandler<RepositorySavingChangesEventArgs> SavingChanges;
private void OnSavedChanges()
{
    if (SavedChanges != null)
    {
        var eventArgs = new RepositorySavedChangesEventArgs()
        {
            AuditDate = _auditDate
        };
        SavedChanges(this, eventArgs);
    }
}
public event EventHandler<RepositorySavedChangesEventArgs> SavedChanges;

然后简单地确保您的客户端代码订阅了 SavingChanges 事件处理程序。工作完成。实际上,您只在知道关键更改的上下文中订阅,然后在该事件处理程序中触发电子邮件服务调用。

希望这有帮助。

[edit] 为了响应下面的注释,您可以在服务类、基抽象类或更简单的控制器中引发这些事件中的任何一个。 下面是控制器引发事件的示例:

public TimelinesController(IRepository repository)
{
_serviceTasks = new TimelineService(repository);
    repository.SavedChanges +=
        new EventHandler<RepositorySavedChangesEventArgs>(repository_SavedChanges);
}
private void repository_SavedChanges(object sender, RepositorySavedChangesEventArgs e)
{
    var newDate = e.AuditDate;
    /* do something fancy with the audit date */
}

希望这为您指明了一个更"指向"的方向:)