2010-03-29 9 views
13

Say mam:Jak przekierować w funkcji ViewResult lub ActionResult?

public ViewResult List() 
{ 
    IEnumerable<IModel> myList = repository.GetMyList(); 
    if(1 == myList.Count()) 
    { 
     RedirectToAction("Edit", new { id = myList.Single().id }); 
    } 

    return View(myList); 
} 

Wewnątrz tej funkcji, to sprawdzić, czy jest tylko jedna pozycja na liście, jeśli istnieje Chciałbym przekierować prosto do sterownika, który obsługuje ten element listy, w przeciwnym razie chcesz wyświetlić widok listy.

Jak to zrobić? Po prostu dodanie RedirectToAction nie działa - połączenie jest trafione, ale VS po prostu przechodzi nad nim i próbuje zwrócić widok na dole.

Odpowiedz

21

Potrzebujesz tylko return RedirectToAction zamiast wywoływać tylko metodę RedirectToAction. Ponadto Twoja metoda będzie musiała zwrócić kod ActionResult, który jest typem zwrotnym zgodnym zarówno z ViewResult, jak i RedirectToRouteResult.

public ActionResult List() 
{ 
    IEnumerable<IModel> myList = repository.GetMyList(); 
    if(1 == myList.Count()) 
    { 
     return RedirectToAction("Edit", new { id = myList.Single().id }); 
    } 

    return View(myList); 
} 
+2

To zadziałało po zmianie typu zwrotu funkcji na ActionResult, okrzyki! – Pete

+0

Przez cały ranek waliłem głową w biurko, próbując zrozumieć, dlaczego funkcja RedirectToAction() nie działa w moim kontrolerze! Tak prosty! –

Powiązane problemy