【问题标题】:MVC returning wrong viewMVC 返回错误的视图
【发布时间】:2012-01-18 13:07:06
【问题描述】:

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

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

在方法 MyMethod 中,它是无效的,我调用并事件 DownloadStringCompleted 我有:

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

Second 是一个返回 SecondView 的操作方法。 SecondView 是我想要的视图,但它从不显示在浏览器上。断点进入它,传递它,我在浏览器中得到 FirstView。

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

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

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

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

【问题讨论】:

  • 你能显示你的代码的伪代码吗?

标签: asp.net-mvc jquery view


【解决方案1】:

请,

我相信这是因为您的 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,因为不可能(根据我下面的 cmets)通过阿贾克斯调用。见:

asp.net mvc ajax post - redirecttoaction not working

还有:

How can I RedirectToAction within $.ajax callback?

对此进行确认。

【讨论】:

  • 但是重定向被命中,第二个方法被命中。
  • 认为 它仍然与它是一个 ajax 调用有关。我现在不在开发机器上,也不会尝试,但是试一试我的 attempt 看看会发生什么。今天晚些时候我也会这样做..
  • 但我不会从 .cshtml 调用 Second。我从控制器调用它。我不能从 Ajax 调用它。
  • 嗯 - 好的,我会考虑并回复你。也许在每个操作中添加更多代码会有所帮助,只是为了阐明我们正在处理的意图和技术限制。我想我的意思是 - 是否可以重构,以便您有一个返回您的 SecondView 的普通操作??
  • 我在问题中添加了一些细节。
【解决方案2】:

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

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

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

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

【讨论】:

  • @Srcee - 你能在相关页面上发布更多代码吗?我觉得我们看的还不够。根据您在上面与吉姆的讨论,我觉得我缺少一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多