1

我有一个控制器,如下所示,它会触发一堆电子邮件:

  public ActionResult Index()
    {
        ViewBag.Message = "Email Results.";

        emailQueue.emailQueueCompleted += EmailsCompleted;
        emailQueue.Run();


        List<EmailError> emails = new List<EmailError>();


        return View(emails);
    }

但是 emailQueue.Run() 是一个异步任务,在呈现视图时尚未完成。当它随后完成时,它在下面的同一控制器中调用此方法:

   public void EmailsCompleted(List<EmailError> errors)
    {
        if (errors.Count > 0)
        {
            // Do some stuff

           // Re-render view with updated errors if possible
        }
    }

无论如何,我的问题是,在电子邮件队列完成其任务后,一旦我得到更新的错误列表,我是否可以轻松地在此控制器中重新渲染视图?或者,我是否应该等待电子邮件完成,然后再尝试最初呈现视图(请记住,这可能是一个相当长的耗时过程)。一如既往地欢迎提出建议,因为 MVC 通常不是我热衷于研究的领域。

4

1 回答 1

0

您的架构似乎有点错误。您实际上是在问“我如何进行客户端更新以显示运行何时完成?”

您应该考虑改变周围的事物;首先呈现您的视图,然后调用一些 ajax 开始发送电子邮件。然后,一旦发送了电子邮件,页面就会返回响应(记住在您的 ajax 调用上设置超时以等待更长时间),然后可以适当地呈现新元素。

此外

通常,这类事情可能最好不要放在 Web 应用程序中,并且更适合 Windows 服务。然后,您可以简单地呈现一个页面,指示通过基于您的数据库状态的页面发送的批次的状态。

于 2012-05-10T14:25:04.167 回答