2012-01-18 72 views
1

在文件FirstView.cshtml我有一个事件 - 点击一个表格的单元格将您重定向到一个方法:MVC返回错误的观点

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

在该方法的MyMethod,这是无效的,我打电话事件DownloadString完成其中我有:

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

其次是返回SecondView的操作方法。 SecondView是我期望的视图,但它从不在浏览器上显示。断点进入它,传递它并在浏览器中获得FirstView。

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

方法是这样的: Second return View。在它的正文中,我传递了一些ViewData参数。

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

奇怪的是,断点移动通过正确的视图,但我在我的浏览器中得到了错误的。

+0

你可以显示你的代码的伪代码吗? – gdoron 2012-01-18 14:35:49

回答

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

这头的东西都顶部和可能不工作,而是一种替代方法。

- 基于你以后的编辑,我实际上建议你不要使用ajax,因为根据我的评论不可能(通过下面的评论)通过ajax调用在服务器上重定向。见:

asp.net mvc ajax post - redirecttoaction not working

也:

How can I RedirectToAction within $.ajax callback?

确认这一点。

+0

但重定向被击中,第二种方法被击中。 – 2012-01-18 13:31:52

+0

我*认为它仍然与它是ajax调用有关。我现在不在开发机器上,或者会尝试,但给我的*尝试*一个奔跑,看看会发生什么。我今天晚些时候也会这样做。 – 2012-01-18 13:34:49

+0

但是我不会从.cshtml中调用Second。我从控制器中调用它。我不能从Ajax调用它。 – 2012-01-18 13:36:57

0

不要在MyMethod中调用Response.Redirect(...)。相反,致电:

public ActionResult MyMethod() 
{ 
    return Redirect(Url.Action("Second")); 
} 

注意,如果控制器名称是一样的一个你,你并不需要明确包括它。

我只是在我的开发盒上做了一个测试,这个工程(假设我正确地模拟了你的问题)。

+0

我试过了,结果是一样的,我得到第一个视图。 – 2012-01-18 13:53:23

+0

@Srcee - 你可以在相关页面上发布更多的代码吗?我觉得我们看不到足够的。根据你和jim的讨论,我觉得我缺少一些东西。 – JasCav 2012-01-18 15:47:30