web-dev-qa-db-fra.com

Erreur lors de l'exécution de la demande enfant du gestionnaire en vue

J'ai une vue MVC 4 où je rend les actions suivantes

@{
    Html.RenderAction("Index", "Logo");
    Html.RenderAction("Index", "MainMenu");
}

J'ai un formulaire sur ma vue qui est rempli et envoyé au contrôleur. Dans le contrôleur, j'exécute certaines tâches, puis je renvoie le modèle à ma vue

[HttpPost]
public ActionResult Index(ManageAdministratorModel manageAdministratorModel)
{
     // I save some of the fields to the database here.
     return View(manageAdministratorModel);
}

Lorsque je suis redirigé vers la vue, je reçois l'erreur suivante

Erreur lors de l'exécution de la demande enfant pour le gestionnaire "System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper".

sur cette ligne

Html.RenderAction("Index", "Logo");

Une idée pourquoi cela se produit?

29
Andre Lombaard

Ok, j'ai trouvé le problème, j'espère que cela aidera quelqu'un à l'avenir.

Les contrôleurs des vues partielles contenaient chacun le [HttpGet] attribut. Par exemple

[HttpGet]
public ActionResult Index()
{
}

Je supprime l'attribut des deux contrôleurs

public ActionResult Index()
{
}

et tout fonctionne maintenant.

28
Andre Lombaard

Je viens de recevoir cette erreur se produisant dans mon rasoir lorsque ma vue partielle contenait une erreur de formatage de code.

Si vous cliquez sur "Continuer" pour surmonter l'erreur, vous verrez le message d'erreur réel affiché dans la fenêtre du navigateur à partir duquel vous l'avez chargé.

Corrigez l'erreur dans la vue partielle et cela fonctionnera!

26
Luke

Remplacer:

return View(manageAdministratorModel);

avec:

return PartialView(manageAdministratorModel);

sinon, vous pourriez vous retrouver dans une boucle infinie parce que vous effectuez le rendu d'une vue qui tente de rendre une vue qui tente de rendre une vue, ...

Vous devrez peut-être également supprimer le [HttpPost] attribut de votre action enfant.

9
Darin Dimitrov

L'exemple de "Child Action Only" est:

     public class FiltersController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [ChildActionOnly]
        public ActionResult Departments()
        {
            string s = "Mahi and kallu";
            return View(s);
        }

    }

**for this am creating 2 views** 
1) Index:

    <html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
         @Html.Partial("Departments","Filters")

</body>
</html>
**and for Departments View:**
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Departments</title>
</head>
<body>
    <div>
       @Model      
    </div>
</body>
</html>


the ***childactions*** can be rendered with the help of "Partial" keyword.
2
mtrivedi

Débarrassez-vous de la mise en page @{ Layout = null; } dans la vue enfant.

2
user2021262

J'ai eu exactement le même problème, et parce que j'utilisais le routage d'attributs, le message d'erreur d'exception interne était:

No matching action was found on controller ''. 
This can happen when a controller uses RouteAttribute for routing, 
but no action on that controller matches the request.

Supprimez les attributs [HttpGet] des méthodes d'action appelées par Html.Action () et cela fonctionne. Rien à voir avec le routage.

1
nmit026

J'ai eu ce problème, cela peut arriver parce que le moteur de rendu ne trouve aucune vue (correspondant au nom donné dans acton) .J'ai donné un mauvais nom de vue (j'ai par erreur donné un nom d'action au lieu d'un nom de vue) lorsque retourner le nom de la vue et le modèle de vue en utilisant la méthode PartialView(), j'ai corrigé mon nom de vue et cela a bien fonctionné

1
Code_Worm

J'ai eu la même erreur. Cela a commencé lorsque j'ai changé une action en un autre contrôleur, donc lors de l'exécution du programme, je n'ai pas pu trouver la vue dans le dossier. Donc, si vous déplacez une action vers un autre contrôleur, déplacez également la vue vers le contrôleur du dossier respectif.

1

Cela m'est arrivé, parce que j'appelais la vue de différentes régions.

La vue que je voulais appeler ne se trouvait pas dans une zone, donc lorsque vous l'appelez de l'extérieur de toutes les zones, un appel comme

@Html.RenderAction("Index", "Logo");

fonctionnerait sans problèmes.

Mais quand je voulais que cette même vue soit appelée depuis une autre vue qui était à l'intérieur d'une zone, je devais ajouter des informations supplémentaires à l'appel pour la rendre explicite:

@Html.RenderAction("Index", "Logo", new { area = "" });

0
DrCopyPaste

J'ai eu cette erreur, mais mon problème était différent. Pour voir de quoi s'agit-il, impliquez la ligne dans laquelle vous obtenez l'erreur dans un code try catch, comme ceci:

 try 
    {           
         @Html.RenderAction("Index", "Logo", new {id = Model.id});
    }
    catch (Exception e)
    {
        throw;
    }    

Exécutez-le avec un point d'arrêt sur la ligne de lancer et vérifiez l'exception intérieure du "e". Mon problème était que j'avais changé le nom du paramètre sur mon contrôleur et oublié de le changer sur ma vue.

Il est plus facile d'obtenir l'erreur en utilisant try catch.

0
Lucas

J'étais confronté au même problème mais j'ai mis l'attribut [HTTPGet] sur le nom de la fonction et cela a fonctionné pour moi.

[HttpGet]
//for Filter parital view
[ChildActionOnly]
public ActionResult Filter()
{ 
  // Your code will come here.
}
0
Fox Eyes