我有一个控制器,如下所示:一堆电子邮件:
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通常不是我热衷于深入研究的领域,所以建议一如既往。
答案 0 :(得分:0)
你的架构似乎有点错误。您有效地询问“我如何进行客户端更新以显示运行何时完成?”
你应该考虑改变一切;首先渲染您的视图,然后调用一些ajax开始发送电子邮件。然后,一旦发送电子邮件,页面就会得到响应(记住在ajax调用上设置超时以等待更长时间),然后可以适当地呈现新元素。
<强>另外强>
通常情况下,这类事情可能最好不在Web应用程序中,更适合Windows服务。然后,您可以根据您的数据库状态,通过页面简单地呈现指示批量发送状态的页面。