2011-04-24 85 views
1

这可能是一个奇怪的问题,但我有MVC3中的表单,通过json发布到在幕后做了大量工作的控制器。虽然这一切都在进行,但我希望能够将一些消息返回给用户,以更新当前状态。 “联系服务器,提交请求”等使用“返回”之前从控制器输出字符串

看来,虽然我可以说“返回JSON(新...);”到页面,我不想在整个操作完成之前返回任何内容。那么在最终返回被调用之前,我怎么能从控制器返回字符串到页面呢?首先,这只是一件愚蠢的事情吗?

回答

2

这是可能的,但我不认为我会做这样的事情=)

在动作方法

,如果该请求不是AjaxRequest,渲染你的ViewData设置状态信息的虚拟视图(也可以在ViewData中设置表单数据);在该视图上,发送一个ajaxRequest到相同的URL(如果需要,发布表单数据)并将响应附加到页面上。如果请求是AjaxRequest(检入操作方法),则使用数据呈现真实视图。

在某些情况下,你可以使用与真正的长期请求一些彗星的技术(例如,在一些大型报表)

+0

嗯,这是一个有趣的技术,听起来像它可以工作。如果我开始发送太多这样的请求,网络服务器将会停止运行,但我认为我将返回的这几条消息应该没问题。干杯! – boolean 2011-04-24 16:55:58

2

False,

你想要什么通常称为“等待页面”。我刚刚在SOF搜索“json”等待页面“”,出乎意料地没有发现任何东西。一般的做法是,您的控制器拦截“请求可能慢的页面”的http请求,并立即将“等待页面”返回给用户代理。一个典型的“等待页面”不会给你任何关于你的请求进度的“真实”反馈;我想是因为这样做会涉及到很多从客户端到服务器的基本上非生产性的“往返”(请求)。实际上,我的正常等待页面只是一个“Processing ... Please wait ...”消息,位于“旋转齿轮”的动画GIF上方。您的WaitPage包含一段包含计时器的java脚本,该计时器周期性地向服务器发送“我们还在那里”请求。如果请求完成,控制器(显然)将初始请求转发到结果页面;如果不是,控制器什么也不做,等待下一次来自客户端的时间请求。

这是一个棘手的代码,我意识到我的回复与JSON或MVC(如此)没有任何关系;但是这是过去如何处理这个问题的总体概述......并且没有人似乎对整体效果抱怨太大。

干杯。基思。

0

这违反了分层的体系结构方法。相反,您应该在您的网页上使用ajax和计时器,并向控制器查询更新。您的控制器可以使用消息缓冲区来存储更新。

然后,您可以编写一个单独的控制器,该控制器在您的主操作正在进行时为页面发送的每个查询返回消息缓冲区中的消息。

0

您是否考虑过websockets或SignalR?上次我看起来SignalR并没有在Web场中工作,但是它可以在适当的时候启用双向对话和服务器,任意推送给客户端。

相关问题