我有一个简单的视图,当我单击按钮时,它会通过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显示正在等待。 没有页面错误或控制台错误显示。
关于此事的任何想法。感谢您的任何帮助。
答案 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¶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>