在文件FirstView.cshtml中我有一个事件 - 点击一个表格的单元格会重定向到一个方法:
$.get('@Url.Action("MyMethod", "MyController")', { someParameters });
在MyMethod方法中,这是无效的,我调用了我的事件和事件DownloadStringCompleted:
Response.Redirect(Url.Action("Second", "MyController"));
其次是返回SecondView的动作方法。 SecondView是我想要的视图,但它从未在浏览器上显示。断点进入,传递它,我在浏览器中获得FirstView。
可能是什么原因?可能是因为他们在同一个控制器中吗?
方法是这样的: 第二次返回视图。在它的主体中,我传递了一些ViewData参数。
活动: 我读了一些JSON数据并调用了重定向。
奇怪的是,断点会在正确的视图中移动,但我的浏览器出错了。
答案 0 :(得分:0)
Srcee,
我相信这是因为你的ajax函数在完成MyMethod操作后就已经“完成”了。由于ajax调用,重定向不会被触发,因为它不是管道的一部分(至少,这是我的基本理解)。您可以选择以下几种方式:
$.ajax({
url: '@Url.Action("MyMethod", "MyController")',
data: { id: 123 }, // i.e. someParameters
context: document.body,
success: function(){
window.location = '@Url.Action("Second", "MyController")';
}
});
这是最重要的东西,可能不起作用,但是另一种方法。
[edit] - 根据您之后的编辑,我实际上会建议您根本不使用ajax,因为根据我的评论,我不可能通过以下方式重定向服务器ajax电话。见:
asp.net mvc ajax post - redirecttoaction not working
还有:
How can I RedirectToAction within $.ajax callback?
对此进行确认。
答案 1 :(得分:0)
尽量不要在MyMethod中调用Response.Redirect(...)。相反,请致电:
public ActionResult MyMethod()
{
return Redirect(Url.Action("Second"));
}
请注意,如果控制器名称与您所在的控制器名称相同,则无需明确包含该名称。
我刚刚在我的开发盒上进行了测试,这是有效的(假设我正确地模拟了你的问题)。