C# MVC刷新视图

C# MVC刷新视图,c#,asp.net-mvc-3,asynchronous,C#,Asp.net Mvc 3,Asynchronous,我有一个控制器,如下所示,它会发出一堆电子邮件: public ActionResult Index() { ViewBag.Message = "Email Results."; emailQueue.emailQueueCompleted += EmailsCompleted; emailQueue.Run(); List<EmailError> emails = new List<Email

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

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

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


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


        return View(emails);
    }
public ActionResult Index()
{
ViewBag.Message=“电子邮件结果。”;
emailQueue.emailQueueCompleted+=EmailsCompleted;
emailQueue.Run();
列表电子邮件=新列表();
返回视图(电子邮件);
}
但是,emailQueue.Run()是一个异步任务,在呈现视图时尚未完成。当它随后完成时,将在下面的同一控制器中调用此方法:

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

           // Re-render view with updated errors if possible
        }
    }
public void emails已完成(列出错误)
{
如果(errors.Count>0)
{
//做点什么
//如果可能,请使用更新的错误重新渲染视图
}
}

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

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

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

另外

通常,这种事情最好不要出现在web应用程序中,更适合windows服务。然后,您可以简单地呈现一个页面,该页面通过基于DB状态的页面指示批处理发送的状态

这是一个使用MVC和singalR的项目,它做的事情与您的需求类似。