11
votes

ASP.NET MVC 3 Vue partielle dans la page de la mise en page

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. xxx

Voici comment on ressemble au code de mon contrôleur "layoutoutController.cs". xxx

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). xxx

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 '."

Qu'est-ce que je manque des amis? Comment puis-je appeler une vue partielle dans une page de mise en page?

Merci à l'avance!


2 commentaires

Où se trouve votre vision partielle


~ / Vues / partagée / _LayoutPartial.cshtml


4 Réponses :


18
votes

au lieu de: xxx pré>

faire: p> xxx pré>

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>


2 commentaires

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 ") au lieu de @ {html.renderaction (" index "," mise en page ");} bien que Je ne sais pas ce qui est plus rapide.



6
votes

Vérifiez d'abord que votre affichage enfant est à l'intérieur du répertoire partagé xxx

ou xxx

et don Utilisez @ html.encode () , le rasoir fait déjà pour vous. Il suffit d'utiliser xxx


5 commentaires

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



2
votes

J'ai résolu cette erreur sur la page de la mise en page

@{Html.RenderAction("action","controller");}


0 commentaires

0
votes

Je sais que c'est une vieille question mais je pensais que je voudrais jeter ceci ici. Vous pouvez utiliser html.action ou html.renderaction . 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é.

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 html.renderaction 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 Retourne une chaîne avec le résultat.

source


0 commentaires