【问题标题】:.net MVC Get Post Return View.net MVC 获取帖子返回视图
【发布时间】:2014-03-30 18:23:35
【问题描述】:

通常我会设置一个 GET POST 重定向周期,但是我遇到了一种情况,我需要返回一个新视图,而不是重定向。这样做的问题是新页面具有上一页的 URL(因为我没有重定向,我刚刚返回了一个新视图)。有什么方法可以在不重定向的情况下更改呈现给用户的页面 url?

我实际上正在实现一个向导,我需要在页面之间保留数据,但是我无法通过导致上述方法的重定向(TempData 已禁用..)来保留数据。一个可能的解决方案是创建一个表来存储我需要持久化的临时数据,但这是不可取的。我也不想让向导的每个字段都有一个视图,而只是使用 jscript 来隐藏显示不同的步骤。

非常感谢任何帮助、提示或一般性建议。

谢谢。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    不,您必须重定向才能有效地更改 URL。

    【讨论】:

      【解决方案2】:

      您总是可以 POST 到一个新的 URL,对吧?

      在你的向导中,你可以这样做

      1. myWizard/step1
      2. myWizars/step2

      这没有问题,只是如果他们按 F5 就会重新发布。

      在帖子之间,可以进行模型绑定,然后打印出 html hiddens。

      ViewState 2.0

      【讨论】:

      • 感谢您的回复。我可以通过发布数据并将其作为模型返回来保留我的数据,这不是问题。但是,如果我发布到下一步,那么我无法进行一些验证并在没有重定向的情况下返回同一页面。
      【解决方案3】:

      您可以使您的视图成为强类型视图,这样您就可以在返回时将数据传递给该视图。只需使用您想要持久化的数据创建一个视图模型。

      return View("MyViewPage", objData);
      

      【讨论】:

        【解决方案4】:

        也许你可以做这样的事情?

        1. 用您的表单将视图包裹起来。
        2. 将其发布到第二个 URL。
        3. 执行验证并在失败时返回相同的部分。
        4. 否则,返回您的第二个视图。

        您必须将表单设置为子操作,以阻止 PartialViewResult 成为 POST 上的整个呈现标记(并发布到父操作),因此这在术语方面确实有一些限制您将能够呈现的内容(例如,如果您希望为第二页更改布局,您可能需要解决一些问题)。

        这样,您可以在验证错误时保持 ModelState 完整,直接从 POST 返回您的第二个视图,并且仍然有不同的 URL。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-28
          • 1970-01-01
          • 2018-05-24
          • 2020-08-27
          • 2013-01-18
          • 1970-01-01
          相关资源
          最近更新 更多