Je suis une action ListeMVC3 Pourquoi l'erreur "Les actions enfants ne sont pas autorisées à effectuer des actions de redirection"?
//[HttpGet] (will come back to that!)
public ViewResult List(int page = 1)
{
//blah blah blah
return View(viewModel);
}
À son avis, nous rendions l'action:
@{
Html.RenderAction("UpdateSearch");
}
définitions d'action:
[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");
}
et je suis en train: les actions de l'enfant ne sont pas autorisés à effectuer une exception d'actions de redirection chaque fois que quelqu'un soumet le formulaire. Je suis nouveau à MVC3, mais il semble que la redirection est également un POST, car si [HttpGet] au-dessus de la méthode List est décommentée, "la ressource ne peut pas être trouvée" se produit. Comment changer la méthode Http lors de la redirection ou suis-je en train de faire quelque chose de mal? J'ai essayé de Bing, mais pas de succès.
Cela aurait du sens, mais la redirection dans mon exemple ne se fait pas par méthode avec les annotations [ChildActionOnly]. Le problème est que lorsque [HttpPost] UpdateSearch redirige vers List, il redirige avec POST, donc [HttpPost] méthode est (essayant d'être) utilisé pour la génération partielle dans la vue. Puis-je utiliser RouteValueDictionary pour le changer? –
Montrez-nous également le contenu de la vue partielle. Le problème réside probablement dans une mauvaise définition d'itinéraire dans BeginForm mais je ne peux pas le dire sans voir la vue. –
Vous avez raison. Pour résoudre ce problème, il suffit d'ajouter le paramètre d'action à la méthode BeginForm en vue UpdateSearch (Get, version enfant) si un changement de: /@ en utilisant (Html.BeginForm()) { à: /@ using (Html.BeginForm ("UpdateSearch")) { a résolu le problème. Es-tu capable d'expliquer pourquoi? –