MVC返回错误的观点

时间:2012-01-18 13:07:07

标签: asp.net-mvc jquery view

在文件FirstView.cshtml中我有一个事件 - 点击一个表格的单元格会重定向到一个方法:

$.get('@Url.Action("MyMethod", "MyController")', { someParameters });

在MyMethod方法中,这是无效的,我调用了我的事件和事件DownloadStringCompleted:

Response.Redirect(Url.Action("Second", "MyController"));

其次是返回SecondView的动作方法。 SecondView是我想要的视图,但它从未在浏览器上显示。断点进入,传递它,我在浏览器中获得FirstView。

可能是什么原因?可能是因为他们在同一个控制器中吗?

方法是这样的: 第二次返回视图。在它的主体中,我传递了一些ViewData参数。

活动: 我读了一些JSON数据并调用了重定向。

奇怪的是,断点会在正确的视图中移动,但我的浏览器出错了。

2 个答案:

答案 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"));
}

请注意,如果控制器名称与您所在的控制器名称相同,则无需明确包含该名称。

我刚刚在我的开发盒上进行了测试,这是有效的(假设我正确地模拟了你的问题)。