我有一个ASP.NET MVC应用程序,其视图通过POST提交表单值。当我的控制器操作方法收到POSTed数据时,它只用服务器方面的东西,不需要反馈到客户端。
但是我需要返回一个ActionResult。如果我返回null或EmptyResult,则在提交表单后页面将变为空白。我可以返回视图,但构建起来相当“昂贵”,所以我想知道是否有办法简单地将值设置为POST,然后不要让浏览器期望得到任何回报?
答案 0 :(得分:3)
考虑使用ajax发布数据。你可以使用jQuery或内置的MVC ajax来轻松完成。
或者,只需在帖子处理程序中重定向到另一个页面(可能是同一个页面?)。无论如何,这可能是理想的方法;如果有人在填写表单后刷新页面,则不会显示重新发送表单对话框。这被称为Post-Redirect-Get Pattern(或PRG)。
答案 1 :(得分:2)
您应该考虑使用像jquery.post
这样的AJAX技术发布表单。
答案 2 :(得分:2)
客户端的POST(或甚至是GET)请求意味着客户端期望从服务器返回响应。如果客户端获得空回复,则会显示空白页面。您在客户端使用的任何框架都无法解决这个问题。
然而,正如其他人所说,你有一些选择:
您可以使用异步POST (通过AJAX)将POST请求发送到服务器端。这样客户端 发送POST请求, 期待回复,但这不会影响客户端所在的页面。整个事情是在另一个线程上完成的,可以这么说,如果你没有返回一个响应就没关系了。您可以考虑使用与MVC包捆绑在一起的jQuery客户端库来轻松完成此任务。
您可以使用重定向后获取模式。在此方法中,客户端将执行POST请求并等待响应。但是,您的POST操作的操作方法将不会返回一个具体的答案,但将返回一个RedirectResult到GET操作的操作方法,因此客户端将请求,并等待它的响应,反过来,GET操作的动作方法contruct视图和把它返还。作为回报,客户端将显示该视图。
但是,我相信您的View生成逻辑很昂贵,因此您不希望一次又一次地生成它。在这种情况下,您可以使用的一个选项是使用服务器端output caching来缓存GET处理方法的View输出。这样,即使您使用Post-Redirect-Get模式,也不会一次又一次地重建您的视图。
现在让我快速回顾每个替代方案的优点和缺点。
<强>优点:强>
<强>缺点:强>
答案 3 :(得分:1)
快速解决此问题,只需将已创建的视图返回给用户,如发布后,重定向到您的主页或重定向到您的获取页面。
答案 4 :(得分:0)
传统的POST操作是一个命令,用于浏览器发送数据并接收回来的内容。 考虑使用ajax技术作为优雅且非常简单的解决方案。
编辑: POST不应该返回html内容响应!它应该只发布数据然后重定向到GET一个新的页面(可能是相同的URL)