Mam listę działańMVC3 Dlaczego pojawia się komunikat "Akcje dziecka nie mogą wykonywać działań przekierowania"?
//[HttpGet] (will come back to that!)
public ViewResult List(int page = 1)
{
//blah blah blah
return View(viewModel);
}
Zdaniem świadczymy działanie:
@{
Html.RenderAction("UpdateSearch");
}
definicje akcji:
[ChildActionOnly]
[HttpGet]
public PartialViewResult UpdateSearch()
{
// do something and display a form in view
return PartialView(so);
}
[HttpPost]
public RedirectToRouteResult UpdateSearch(Options searchOptions)
{
// do something and redirect to List
return RedirectToAction("List");
}
i Dostaję: Działania dziećmi nie są dopuszczone do wykonuj wyjątek działania przekierowania za każdym razem, gdy ktoś przesyła formularz. Jestem nowy w MVC3, ale wygląda na to, że przekierowanie jest również POST, ponieważ jeśli [HttpGet] powyżej metody listy zostanie odkomentowany, "nie można odnaleźć zasobu".
Jak zmienić metodę Http podczas przekierowania lub czy robię coś nie tak? Próbowałem to Bing, ale bez powodzenia.
To miałoby sens, ale przekierowanie w moim przykładzie nie jest wykonywane za pomocą adnotacji [ChildActionOnly]. Problem polega na tym, że gdy [HttpPost] UpdateSearch przekierowuje do listy, przekierowuje z POST, stąd metoda [HttpPost] jest (próbuje być) używana do częściowego generowania w widoku. Czy mogę użyć RouteValueDictionary, aby to zmienić? –
Pokaż nam również zawartość widoku częściowego. Problem prawdopodobnie leży w błędnej definicji trasy w BeginForm, ale nie mogę powiedzieć, nie widząc widoku. –
Masz rację. Aby go naprawić, wystarczy dodać parametr działania metody BeginForm zdaniem UpdateSearch (GET, wersja dla dzieci), więc zmiana z: /@ using (Html.BeginForm()) { do: /@ przy użyciu (Html.BeginForm ("UpdateSearch")) { naprawiono problem. Czy jesteś w stanie wyjaśnić, dlaczego? –