2009-08-21 101 views
8

我有一个场景,我在一个视图页面上,并调用控制器A中的一个操作方法,通过RedirectToAction返回调用控制器B中的另一个操作,并且此操作返回已在上面的视图。RedirectToAction不刷新页面

我希望页面刷新以反映这两个操作所做的对系统状态的更新,但是MVC似乎决定在我返回相同视图时不需要刷新页面。我如何强制刷新?

例子:

//user is on A/index, and submits a form that calls this in contoller B 
public ActionResult ActionInControllerB() 
{ 
    //do stuff 
    return RedirectToAction(ActionNames. ActionInControllerA, ControllerNames.A); 
} 

public ActionResult ActionInControllerA() 
{ 
    //do stuff 
    return View("index"); 
} 
+0

你在做什么听起来很合理,而且结果没有意义。你能否将2种方法的代码粘贴到2个不同的控制器中? – 2009-08-21 08:31:28

+0

按照您的要求添加了代码。谢谢大卫 – Dan 2009-08-21 09:30:14

+0

嗯,是的怀疑没有什么奇怪的。请看下面你对我的回答的看法... – 2009-08-21 11:06:03

回答

0

我将是一个有点模糊这里,因为我真的不知道,但我见过的东西沿着这些路线之前(而不是别人接听)。可能的问题是更新事务在重定向之前尚未处理或刷新。例如NHibernate有时会等待提交更新到db,直到我认为处理完响应之后。

如果是这种情况,那么无论您在控制器A中执行什么操作,都只是无法获取更改。也许你可以尝试以某种方式强制数据库提交进行处理。

对不起,但那是我能想到的唯一可能性。你必须穿上你的谷歌装备和头带!

+0

不幸的是,这不是问题。我的ORM已经完成了所有的工作,并且在这两种情况下都会出现其他客户端位。 – Dan 2009-08-21 12:51:21

+0

哦:-(如果你真的被困住了,你可以尝试一个Response.Redirect(Request.Url.ToString()),但如果这样做的话,那么它是一个解决方法和一个混乱的。 – 2009-08-21 13:21:57

0

我在我的项目上有这样的问题。可能发生的事情,我假设你是在ActionInControllerB中更新你的视图,然后当你RedirectToAction它正在清除该视图。我有一个像这样的问题,我没有在我的GET:控制器中更新,只是在POST:控制器中更新。因此,我想展示的东西没有出现。所以我建议你确保你对显示的改变发生在正确的地方。

我对MVC相当新,所以我可能会误解你的问题,如果我是,对不起。但是,我希望这至少能帮助你一点。

7

我猜你正在运行缓存问题。

装饰你ActionInControllerB和ActionInControllerA方法有:

[OutputCache(Location=System.Web.UI.OutputCacheLocation.None)] 
1

我有类似的问题,但它从视图文件到控制器文件ajax调用启动。控制器更新了数据库,然后调用RedirecToAction以刷新视图。但没有刷新... 上面的答案都没有帮助我。我能解决的唯一途径是通过使用不同的方法来调用视图文件的操作:

window.location = "Experiment/DeleteExperiment?experimentId=" + $("#DeleteExperimentButton").val(); 

从这一点来说一切担任我预料到了。