我有这个简单的视图,当我点击一个按钮时,它通过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会显示等待。没有页面错误或控制台错误显示。
关于这个问题的任何想法。感谢您提前提供的任何帮助。
如果您真的希望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获取视图的内容不会自动更改您的页面以查看视图。
如果要在新页面中按下按钮结果,则应将按钮用作链接。
在.cshtml文件中:
<a class="looksLikeAButton" href="./ExtensibleCosting?param1=value1¶m2=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>