2008-11-25 20 views
29

Mam widok, który zawiera formularz, postów formularza i dane przetwarzane itp., A następnie chcę zwrócić indeks widoku, więc powrót widoku ("Index");ASP.NET MVC zwraca inny widok

jednak będzie to narzekać, że mój ViewData nie istnieje, mam wrażenie, że kod kontrolera pod Index() nie jest przetwarzany, co dodaje listę, której wymaga do ViewData, ktoś wie, co jest nie tak?

Dzięki

edit: Widocznie to się robi, aby zapobiec rekursji .. W takim przypadku, gubię się, co zrobić, bez powtarzania wszystkie moje rzeczy ViewData oba kontrolery

Odpowiedz

56

Myślę, że powinieneś mieć dwa akcje: jedna, która przetwarza przesłanie formularza, i druga, która zbiera dane do widoku. Po przetworzeniu formularza dzwonisz pod numer return RedirectToAction("Index") i gotowe. Mam nadzieję, że zrozumiałem, co przez to rozumiesz.

+4

+1 absolutnie do zrobienia, przeczytaj http://en.wikipedia.org/wiki/Post/Redirect/Get, aby uzyskać więcej informacji na temat korzyści z tego podejścia. – dove

+4

A może bez przekierowania? return View ("Index") – Luckyy

+0

@CodeClimber. Mam podobny scenariusz. Mam częściowy widok na stronie indeksu. Częściowy widok przesyła formularz. na danych przesłania formularza jest przechowywany w bazie danych. Chcę wyświetlić najnowsze dane na stronie indeksu. kiedy spróbowałem twojego podejścia dostaję ten błąd "Element modelu przekazany do słownika jest typu" System.Collections.Generic.List, ale słownik wymaga elementu modelu typu "UnderstandingPartialViews.Models.abc" " –

6

Jeśli twoja metoda Index na kontrolerze ma wartość return View("Index");, po prostu wywołaj metodę Index z dowolnymi parametrami, których wymaga. Następnie metoda zapełni dane ViewData wymagane przez widok indeksu.

Powiązane problemy