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

C# 如何从ajax调用重定向到另一个操作,c#,asp.net-mvc,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 =(

我有一个简单的视图,当我单击一个按钮时,它会通过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调用实现的。通过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>

提交

如果您确实希望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);

ajax的全部目的是保持在同一页面上。如果您想重定向,请不要使用ajax。我用您的代码尝试了这一点,但没有成功。如果我不发布或获取任何数据,我会发布。还有别的办法吗?$。ajax({type:“POST”,url:“/Trn_IOU/ExtesibleCosting”,数据:JSON.stringify({param1:a,param2:b}),contentType:“application/JSON”,成功:函数(数据){windows.location.href='@Url.Action(“ExtesibleCosting”,“POPM_Trn_IOU”)}我忘了告诉你编辑你的报税表。替换你的报税表视图(OU);按照我在新编辑的答案中指定的方式返回Json。谢谢,我已经完成了。但是返回Json并不需要。我只是传递了变量并返回了视图,它就成功了。很明显,我把窗口拼写错了windows:)非常感谢您的帮助。我完成了:)