如何从ajax调用重定向到另一个操作

问题描述 投票:0回答:2

我有这个简单的视图,当我点击一个按钮时,它通过ajax调用将一些数据发送到另一个动作,并应打开另一个视图。

  public ActionResult ExtesibleCosting(string param1, string param2)
    {
        Trn_IOU ous = new Trn_IOU();

        ous = db.Trn_IOU.Find(Convert.ToInt16(param1));

        ous.Trn_Items =(from p in db.Trn_Items
                                 where p.IOU_DOC_NO == param2
                                 select p).ToList(); 

        return View(ous);
    }

但它不起作用。

用ajax调用传递参数工作正常。 Linq Query工作正常。返回数据和模型对象很好。甚至调试器也跳转到页面并通过元素。直接从链接打开视图工作正常。返回重定向到操作也无法正常工作。网络XHR下的Chrome debuging也会显示视图名称,但TTFB会显示等待。没有页面错误或控制台错误显示。

关于这个问题的任何想法。感谢您提前提供的任何帮助。

c# asp.net-mvc
2个回答
1
投票

如果您真的希望AJAX执行操作但想要重定向,则可以使用以下代码:

success: function(result) {
  if (result == true) {
   window.location.href = '@Url.Action("ActionName", "ControllerName")';
   } elseif {
      //Do other logics
   }
}

这将重定向您对AJAX的成功调用。或者您想要指定的任何链接。

在ActionResult上将您的返回类型更改为Json:

return Json(new { isSuccess = true }, JsonRequestBehavior.AllowGet);

0
投票

你的问题是通过ajax调用。通过ajax获取视图的内容不会自动更改您的页面以查看视图。

如果要在新页面中按下按钮结果,则应将按钮用作链接。

在.cshtml文件中:

<a class="looksLikeAButton" href="./ExtensibleCosting?param1=value1&param2=value2">Click me</a>

如果参数值是在页面加载后确定的(即通过用户操作触发的脚本),那么您的javascript应该在页面生命周期内以编程方式更改URL。

另一种方法:

<form action='@Url.Action("ExtensibleCosting", "MyController")' method="post">
    <input type="hidden" name="param1" value="changeThisValueProgramatically" />
    <input type="hidden" name="param2" value="changeThisAlso" />
    <button type="submit">Submit</button>
</form>
© www.soinside.com 2019 - 2024. All rights reserved.