【问题标题】:MVC with modals page is redirecting wrongly带有模态页面的 MVC 重定向错误
【发布时间】:2017-08-17 03:28:26
【问题描述】:

我尝试使用 Ajax 将表单提交到 MVC 服务器。原因是因为我希望错误出现在我的模态中而不是重定向我。

当我发布到控制器并且模型良好且经过验证时,我会致电redirectToAction("Index"),但由于某种原因,它只是将重定向操作发送到我的模态窗口(我的无效模型会去哪里)......它是将它发送到那里,因为那是 ajax 成功的地方,但如果页面成功,我不希望它去那里。

在这种情况下,我希望整个页面重定向。如何在成功时简单地重定向并忘记模式?如果不清楚我在问什么,我可以提供更多详细信息。

这是我提交表单的方式。

$("#newForm").on("submit", "#form", function (e) {
        e.preventDefault();  // prevent standard form submission
        console.log("ajax successfully called.");
        var form = $(this);
        $.ajax({
            url: form.attr("action"),
            method: form.attr("method"),  // post
            data: form.serialize(),
            success: function (partialResult) {
                $("#newForm").html(partialResult);
            }
        });
    });

【问题讨论】:

  • 成功后,您可以先关闭模式。然后调用您的 MVC 操作?
  • 你能不能只在你的成功块中添加这样的东西:window.location.href = "/now/go/here";
  • 我不这么认为。这是我正在遵循的表单验证示例。在这个例子中,他称之为成功的局部视图。代替成功,我试图重定向整个页面。 stackoverflow.com/a/31064411/5874935
  • 我想在基本层面上,您可以检查返回的数据是否只有在成功验证时才填充的特定值,然后根据它是否存在进行重定向?
  • 您进行 ajax 调用和 ajax 调用永远不会重定向 - ajax 的全部意义在于保持在同一页面上(使用 RedirectToAction("Index") 将不起作用)。如果你最终想在成功的情况下重定向,那么不要使用ajax,进行正常提交(如果不成功则返回视图)

标签: asp.net asp.net-mvc


【解决方案1】:

在这里说完了所有的事情,问题就来了。 ajax 调用返回内容,而我的控制器正在返回一个视图。所以,我用来解决这个问题的答案是在我的控制器中,如果我返回 null 成功,在 else 中需要返回无效模型状态的视图或你有什么。

最后,在 ajax 调用的视图部分,我在成功块内添加了一个 if 语句,用于检查返回的 data 变量并读取 data.length === 0 是否做一件事,否则什么也不做。这就是我通过 ajax 调用返回多少内容来控制模态、加载器等的方式。

【讨论】:

    【解决方案2】:

    这是一行,您可以通过向其添加 json 值来检查结果是否成功。

    控制器:

    {
      // your logic
      return Json(new { success = true, data = redirectToAction("Index") });
      // or
      return Json(new { success = false });
    }
    

    阿贾克斯:

    success: function (partialResult) {
                if(partialResult.success)
                {   $('#myModal').modal('hide');
                    $("#newForm").html(partialResult.data);
                }
                else
                    $("#newForm").html(partialResult.data);
            }
    

    因此,当您知道结果是成功时,您可以隐藏模式窗口并在此时应用您的重定向。否则,您只需显示错误。 (编辑)

    【讨论】:

    • 这是一个很好的答案...我不确定当时为什么或如何否决它。进行某种编辑,以便我投赞成票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2011-11-08
    • 2018-12-13
    • 2015-02-09
    • 1970-01-01
    • 2013-01-15
    相关资源
    最近更新 更多