2011-12-17 15 views
5

Co ja robię źle z moim kodem MVC tutaj? Widok indeksu zawiera formularz, który się przedkłada, a ja chciałbym, aby kontroler przetworzył zgłoszony formularz, a następnie powrócił do widoku.RedirectToAction nie odświeża strony zgodnie z oczekiwaniami

To, co się dzieje, to fakt, że formularz jest przetwarzany poprawnie, ale widok został zwrócony tak, jakby nic się nie stało (np. Identyfikatory, które zostały usunięte, nadal są wyświetlane). Jeśli jednak ręcznie odświeżę stronę, ponownie wyświetli się ona poprawnie. Nie sądzę, że jest to buforowanie typu broswer, ponieważ przekierowanie do tego samego widoku z innego kontrolera działa dobrze. Jak mogę to naprawić?

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

Edycja: Po wysłaniu formularza, punkt przerwania na pierwszej metodzie nie jest trafiony i stara się „Step Into (F11)” linia return RedirectToAction("Index"); tylko porusza się prosto na końcowym } zamiast.

+0

Tak więc POST aktualizuje dane pobierane przez GetComments()? Po zakończeniu testu POST funkcja GetComments() powinna zwrócić różne dane? – danludwig

+0

Tak, POST aktualizuje/usuwa te same dane, które wybiera GET. – mikel

Odpowiedz

4

Zainstaluj program Fiddler lub Firebug dla Firefoksa i obserwuj ruch, zobacz, czy naprawdę zwraca on nową odpowiedź lub HTTP 304 z przeglądarki (strona z pamięci podręcznej). Jeśli wszystko się powiedzie, masz problem z utrzymaniem bazy danych i zapytaniami.

1

Czy próbowałeś tego? Zastanawiam się, w zależności od tego, jak utrwalić dane, jeśli nie jest on zapisywany, dopóki serwer nie zwróci odpowiedzi ..?

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 
} 

Wiem, że niektórzy ludzie użyć IUnitOfWork w MVC, że tylko połączenia SaveChanges/Commit na ORM na końcu wniosku. Czy jest możliwe, że // do rzeczy usuwa elementy z kolekcji, ale nie utrzymują się do db aż PO zwrocie GET Index()?

Aktualizacja

Zamiast zwrotu RedirectToAction("Index"), próbowałeś RedirectToAction(Index())?

0

Spróbuj również wprowadzić nazwę kontrolera. To mi pomogło. Na przykład:

return RedirectToAction("Index","Home"); 
Powiązane problemy