【问题标题】:jQuery post and .NET MVC action - returning partial results to end userjQuery post 和 .NET MVC 操作 - 将部分结果返回给最终用户
【发布时间】:2017-07-05 12:12:14
【问题描述】:

我有一个关于我以前没有机会遇到的概念的问题,但我已经考虑了很长时间,我想看看它是否可以在 .NET MVC 5 中使用 jQuery ...

假设我们在控制器中有一个动作,如下所示:

[ActionName("OurTestAction")]
[HttpPost]
public ActionResult OurTestAction()
{
 Method1();
//returning some sort of "signal" here to client side to notify that the method1 finished processing data.. ?
 Method2();
 Method3();
 return Json("Ok");
}

触发动作的地方如下:

$(document).ready(function(){
$.post("/Controller/OurTestAction").done(function(response){
// displaying the result here
});
}):

所以我对这段代码的想法是,我可以告诉最终用户 Method1() 何时被调用并结束了它的生命周期。一旦 Method1();完成它应该做的事情,我希望能够在他的浏览器中告诉最终用户这样的事情(通过 jQuery): Method1() 完成处理数据,移动到 method2();

这样的事情在 jQuery 和 .NET 上是否可行,如果可行,如何实现?

有人可以帮帮我吗?

【问题讨论】:

  • 这并不像您在示例中建议的那么简单,但它肯定是可能的。看看一个名为 SignalR 的工具。它的目的是维护一个 Web 套接字连接,从而服务器端代码可以将消息“推送”到客户端代码。有各种各样的例子,从简单的消息通知到聊天系统。
  • 没有。您不能通过单个帖子从控制器返回多个响应。一种可能的解决方案是将您的不同方法移动到它们自己的控制器操作中,然后从您的 JS 代码中同步调用这些方法。另一种可能的方法是打开一个 websocket 连接并以这种方式返回您的响应,但这可能是矫枉过正。
  • 可以通过将 Method1()、Method2() 和 Method3() 分开并使 Async 为 false 来实现
  • @Dilip 你能给我看一个例子吗? :)
  • 另外,FWIW,任何不接近瞬时的东西实际上都不应该由您的 Web 应用程序处理。相反,您应该将其卸载到后台进程(甚至可能在不同的服务器上)。然后,您可以使用 websockets 来检查该其他进程中任务的进度。对用户来说,这一切看起来都一样,但这样您的网络服务器死锁的可能性就会大大降低。

标签: javascript jquery asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

将您的控制器方法分解为不同的操作。

控制器

[HttpPost]
public ActionResult Method1()
{
  Method1();
  return Json("Ok");
}



[HttpPost]
public ActionResult Method2()
{
  Method2();
  return Json("Ok");
}


[HttpPost]
public ActionResult Method3()
{
  Method3();
  return Json("Ok");
}

Javascript

$.ajax({
    type: 'POST',
    url: 'controller/method1'
}).done(function(resp) {
   //do stuff to notify users method 1 is complete
    $.ajax({
        type: 'POST', 
        url: 'controller/method2'
    }).done(function(resp2) {
        //do stuff to notify users method 2 is complete
    });
});

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    相关资源
    最近更新 更多