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



>我有一个简单的视图,当我单击一个按钮时,它会通过 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 显示等待 。 不显示页面错误或控制台错误。

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

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

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

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

在操作结果上将返回类型更改为 Json:

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

你的问题是它是通过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>

最新更新