ASP.NET MVC:所有POST请求都需要返回一些内容吗?

时间:2009-08-16 21:35:32

标签: c# asp.net asp.net-mvc

我有一个ASP.NET MVC应用程序,其视图通过POST提交表单值。当我的控制器操作方法收到POSTed数据时,它只用服务器方面的东西,不需要反馈到客户端。

但是我需要返回一个ActionResult。如果我返回null或EmptyResult,则在提交表单后页面将变为空白。我可以返回视图,但构建起来相当“昂贵”,所以我想知道是否有办法简单地将值设置为POST,然后不要让浏览器期望得到任何回报?

5 个答案:

答案 0 :(得分:3)

考虑使用ajax发布数据。你可以使用jQuery或内置的MVC ajax来轻松完成。

或者,只需在帖子处理程序中重定向到另一个页面(可能是同一个页面?)。无论如何,这可能是理想的方法;如果有人在填写表单后刷新页面,则不会显示重新发送表单对话框。这被称为Post-Redirect-Get Pattern(或PRG)。

答案 1 :(得分:2)

您应该考虑使用像jquery.post这样的AJAX技术发布表单。

答案 2 :(得分:2)

客户端的POST(或甚至是GET)请求意味着客户端期望从服务器返回响应。如果客户端获得空回复,则会显示空白页面。您在客户端使用的任何框架都无法解决这个问题。

然而,正如其他人所说,你有一些选择:

  1. 您可以使用异步POST (通过AJAX)将POST请求发送到服务器端。这样客户端 发送POST请求, 期待回复,但这不会影响客户端所在的页面。整个事情是在另一个线程上完成的,可以这么说,如果你没有返回一个响应就没关系了。您可以考虑使用与MVC包捆绑在一起的jQuery客户端库来轻松完成此任务。

  2. 您可以使用重定向后获取模式。在此方法中,客户端将执行POST请求并等待响应。但是,您的POST操作的操作方法将不会返回一个具体的答案,但将返回一个RedirectResult到GET操作的操作方法,因此客户端将请求,并等待它的响应,反过来,GET操作的动作方法contruct视图和把它返还。作为回报,客户端将显示该视图。

    但是,我相信您的View生成逻辑很昂贵,因此您不希望一次又一次地生成它。在这种情况下,您可以使用的一个选项是使用服务器端output caching来缓存GET处理方法的View输出。这样,即使您使用Post-Redirect-Get模式,也不会一次又一次地重建您的视图。

  3. 现在让我快速回顾每个替代方案的优点和缺点。

    <强>优点:

    1. 易于实施;来往客户的流量少得多;客户端页面不会继续重新加载。
    2. 同样适用于所有浏览器;如果您的视图稍后需要根据您的POST请求进行更改,则可以更轻松地将其集成到此模式中。
    3. <强>缺点:

      1. 需要在客户端启用JavaScript(兼容)(如果您定位移动设备,这可能会出现问题);由于您在不同的图层上传播逻辑,因此难以调试和维护。
      2. 更加健谈,即。来往客户的流量更多;您需要微调输出缓存方法,以便最终不会提供陈旧(甚至错误)的内容。

答案 3 :(得分:1)

快速解决此问题,只需将已创建的视图返回给用户,如发布后,重定向到您的主页或重定向到您的获取页面。

答案 4 :(得分:0)

传统的POST操作是一个命令,用于浏览器发送数据并接收回来的内容。 考虑使用ajax技术作为优雅且非常简单的解决方案。

编辑: POST不应该返回html内容响应!它应该只发布数据然后重定向到GET一个新的页面(可能是相同的URL)