【问题标题】:MVC 2.0 Post Form to action instead of redirect to actionMVC 2.0 将表单发布到操作而不是重定向到操作
【发布时间】:2010-08-17 06:57:32
【问题描述】:

我正在使用 T4MVC 重定向到另一个动作返回 RedirectToAction(MVC.MyController.MyAction());。 结果它正在执行获取请求。

有没有办法从控制器发出发布请求。我想保持一切不变,但只发布帖子而不是获取。我找不到任何方法。我在这里找到了一个帖子助手http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx,但我无法使用这个帖子助手传递我需要的任何值。我试图通过 TempData 传递值,但是当我使用这个助手时它们没有出现。可能有人有什么想法吗?

我之所以要这样做是因为当用户从一个控制器转到另一个控制器时,如果用户单击更新或只是在浏览器地址栏中单击输入,页面将中断。

出于这个原因我应该使用会话吗?

【问题讨论】:

    标签: asp.net-mvc-2


    【解决方案1】:

    RedirectToAction 将始终执行 GET,而不是 POST(它向浏览器返回 HTTP 302,然后浏览器将发出 GET 请求)。

    要在重定向中持久化数据,如果它是可以轻松表示为字符串并存储在查询字符串中的数据,那么您只需将其添加到重定向的路由值中即可。 例如

    return RedirectToAction("Search", new { searchString = "whatever" });
    

    如果是复杂类型,则需要将其存储在 TempData 中。 StackOverflow 上的许多其他问题(例如 this one)提供了有关如何操作的详细信息。

    如果在您的应用程序中重复存储和读取 TempData 会冒犯您的代码感觉,那么您可以使用 PassParametersDuringRedirect 属性和MvcContrib project 中提供的通用 RedirectToAction 来封装它。 here 提供了有关此技术的一些详细信息。

    【讨论】:

      【解决方案2】:

      发布的唯一方法是拥有一个表单并在该表单上提交,无论是使用提交按钮还是使用 javascript,您想要传递给该操作的任何信息都必须在该表单中,您会发现所有发布在 @ 987654321@(希望我拼写正确)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多