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

时间:2018-09-11 08:10:04

标签: c# asp.net-mvc

我有一个简单的视图,当我单击按钮时,它会通过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查询工作正常。 返回数据和模型对象就可以了。 甚至调试器也跳到该页面并遍历元素。 直接从链接打开视图效果很好。 返回重定向到操作也无法正常工作。 在XHR网络下的Chrome调试也显示视图名称,但是TTFB显示正在等待。 没有页面错误或控制台错误显示。

关于此事的任何想法。感谢您的任何帮助。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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>