2011-12-17 72 views
5

我在做什么错我的MVC代码在这里?索引视图包含一个提交给自己的表单,我希望控制器处理提交的表单,然后返回到视图。RedirectToAction不按预期刷新页面

实际发生的事情是窗体处理正确,但返回的视图好像什么也没有发生(例如,仍然显示已删除的ID)。如果我手动刷新页面,它会再次正确显示。我不认为它是与缓存相关的,因为重定向到来自不同控制器的相同视图可以正常工作。我该如何解决它?

public ViewResult Index() 
    { 
     return View(GetComments()); 
    } 


    [HttpPost] 
    public ActionResult Index(int[] AllIds) 
    { 
     if (AllIds != null) 
     { 
      foreach (int id in AllIds) 
      { 
       // do stuff 
      } 
     } 

     return RedirectToAction("Index"); 
    } 

编辑:当提交表单,第一个方法断点未命中,并试图“进入(F11)的” return RedirectToAction("Index");线只是直线移动到最后}代替。

+0

因此,POST更新由GetComments()检索到的数据?在POST后,GetComments()应该返回不同的数据? – danludwig 2011-12-17 00:29:04

回答

4

安装Firefox的Fiddler或Firebug并观察流量,看它是否真的从浏览器(缓存页面)返回新的响应或HTTP 304。如果一切都检出,那么你的数据库持久性和/或查询就有问题。

1

你试过这个吗?我想知道,取决于你如何坚持数据,如果它没有被保存,直到服务器返回响应..?

public ViewResult Index() 
{ // breakpoint 
    var comments = GetComments(); // debug and inspect the value of this variable 
    return View(comments); 
} 


[HttpPost] 
public ActionResult Index(int[] AllIds) 
{ 
    if (AllIds != null) 
    { 
     foreach (int id in AllIds) 
     { 
      // do stuff 
     } 
    } 

    return RedirectToAction("Index"); // breakpoint 
} 

我知道有些人使用MVC的IUnitOfWork只有调用的SaveChanges /上提交的请求结束的ORM。 //是否有可能会从集合中删除项目,但是直到返回GET Index()后才持久保存到db中?

更新

改为返回RedirectToAction("Index")的,你尝试过RedirectToAction(Index())

0

尝试输入控制器名称。这帮助了我。例如:

return RedirectToAction("Index","Home");