2011-12-08 170 views
2

从我的角度来看,我通过$ .ajax发送了一个JSON对象到我的控制器以将其保存在数据库中。 如果一切都成功了,我想重定向到另一个将显示不同视图的操作。

如果我使用以下代码:

return RedirectToAction("CreatePage", "Survey", new {id = question.PageId}); 

执行前进到调查控制器返回一个视图,但它没有示出。

我读过一些文章,说它不可能通过ajax重定向。

我至今使用的解决方案是通过JavaScript重定向这样的:

success: function (ret) { 
      window.location.href = "/Survey/CreatePage/" + $("#PageId").val(); 
     } 

虽然这总是工作,有时我需要刷新CreatePage视图显示最近所做的更改。

有关如何更好地解决此问题的任何想法?

在此先感谢

+0

我的第一个想法是为什么这是用Ajax完成的?是否曾经有过这样的情况,在帖子后不会重定向?你提到它会在所有成功的情况下重定向,但是你可以处理重定向到错误页面,或者在错误消息的同一页面。在所有情况下都不会调用Ajax - 它是一种工具,只能在适当的时候使用。 – mccow002

+0

您是否期待来自AJAX请求的HTML或JSON?我问的原因是,如果你接受JSON,你理论上可以为每个AJAX JSON请求提供一个包装器响应,这个响应具有一些常见的属性,例如:.Success,.Message,.Data和.Redirect。你的JS可以评估AJAX发回的东西是否需要更新消息或者重定向。 –

回答

1

由于mccow002建议,我是不是真的需要,使通过AJAX该部分的呼叫。在研究了所提出的解决方案之后,我意识到我可以简单地通过表单提交它。我的困惑来了,因为我有一个保存,并继续编辑和保存。为了保存并继续我使用AJAX调用,但对于提交表单的保存选项是可以的。

非常感谢您的帮助。

0

不是重定向到新的页面,你可以在页面从.NET代码发送呈现的HTML返回到客户端并加载HTML,这样$("#main").load(renderedHtml)

但是,刷新页面,你可以编写一个简单的脚本,以指定的时间间隔运行并刷新页面页面。

0

您可以在CreatePage操作上使用[OutputCache],以便它不会缓存页面或只缓存很长时间。

output caching