Je travaille sur la configuration d'un contenu partagé (navigation) pour une page de mise en page ASP.NET MVC.
Voici mon point de vue partiel "_LayoutPartial.cshtml" avec le code pour tirer les données de navigation d'un modèle. p> Voici comment on ressemble au code de mon contrôleur "layoutoutController.cs". p> Voici le code de la "_Layout.cshtml" page. Je tente d'appeler la vue partielle ici à l'aide de la méthode HTML.RenderAction (action, contrôleur). P> lorsque la page de mise en page exécute l'index @ {html.renderaction (" "," Mise en page ");} ligne, il jette un message d'erreur" Erreur exécutant une demande d'erreur pour le gestionnaire "System.web.mvc.htttPhandlerutil + ServerExecutehttTTPHApper '." P> Qu'est-ce que je manque des amis? Comment puis-je appeler une vue partielle dans une page de mise en page? P> Merci à l'avance! P> p>
4 Réponses :
au lieu de: faire: p> Si vous ne le faites pas lorsque vous retournez une vue normale de votre enfant Action, cette vue normale tente d'inclure la mise en page, qui tente à son tour de rendre l'action enfant, qui revient à son tour, qui inclut à son tour la mise en page, qui tente à son tour de rendre l'action de l'enfant, ... et nous finissez avec des noms tels que celui porté par ce même site. p> aussi dans votre partial, vous n'avez pas besoin de faire le double codage. La fonction @ Razor est déjà enCode HTML: P> @model MyApp.Models.ViewModel.LayoutViewModel
<p>
@foreach (var item in Model.navHeader)
{
@item.Name
@item.URL
}
</p>
Jette "la référence d'objet non définie sur une instance d'un objet". à la ligne @Foreach dans le fichier de visualisation partielle. Il semble que l'objet Navheader ne vienne sans articles.
Vous pouvez également simplement écrire @ html.action ("index," layout ") code> au lieu de
@ {html.renderaction (" index "," mise en page ");} code> bien que Je ne sais pas ce qui est plus rapide.
Vérifiez d'abord que votre affichage enfant est à l'intérieur du répertoire code> partagé code> ou p> et don Utilisez @ html.encode () code>, le rasoir fait déjà pour vous. Il suffit d'utiliser p>
La première lancée HTML.Partial "La référence d'objet n'est pas définie sur une instance d'une erreur d'objet". La deuxième suggestion jette le message d'erreur que j'ai publié dans mon 1er post.
Où est votre point de vue partielle, je veux dire que cela doit être dans le répertoire partagé?
Oui, la vue partielle est située dans le répertoire partagé.
Vous n'utilisez pas non plus iEnumerable <>, essayez ceci;
@model iEnumerable
J'ai résolu cette erreur sur la page de la mise en page
@{Html.RenderAction("action","controller");}
Je sais que c'est une vieille question mais je pensais que je voudrais jeter ceci ici. Vous pouvez utiliser Les deux méthodes vous permettent d'appeler une méthode d'action à partir d'une vue et de produire les résultats de l'action en place dans la vue. La différence entre les deux est que source p> html.action code> ou
html.renderaction code>. Ils font tous les deux techniquement la même chose, mais en fonction de la quantité de contenu que vous retournez peut avoir un impact sur lequel vous devriez vraiment utiliser pour une meilleure efficacité. P>
html.renderaction code> rendra le résultat directement à la réponse (qui est plus efficace si l'action renvoie une grande quantité de HTML) alors que
html.action code > Retourne une chaîne avec le résultat. P>
blockQuote>
Où se trouve votre vision partielle
~ / Vues / partagée / _LayoutPartial.cshtml