Question

J'ai assez le déplacement d'un nouveau projet de ViewPages Razor aujourd'hui, et tout semble aller bien. Sauf que je suis en train d'utiliser Html.Action pour rendre un contrôle utilisateur et ne rien rendre.

J'ai un fichier partagé / _Layout.cshtml qui est référencé dans Accueil / Index.cshtml

Index.cshtml a ce qui suit:

<article>

@Html.Action("LatestBlogsMainPanelWidget", "Blogs")

...

</article>

J'ai des pièges mis en BlogsController, donc je sais que l'on demande. Je sais aussi qu'un modèle est retourné, que le LatestBlogsMainPanelWidget est trouvé par le moteur de vue, et même certains code du mannequin rasoir est en cours d'exécution: @ { var s = "bonjour"; }

mais le HTML brut dans ce fichier ne fait pas au navigateur. Je l'ai essayé d'autres (anciennement travail) partials aussi et ils ne semblent soit (voir la source sur la page confirme c'est pas là).

J'ai aussi essayé substituer @ {Html.RenderAction (...); } sans succès. HTML de chaque côté du @ Html.Action apparaît, donc je sais Index.cshtml affiche correctement.

Encore plus curieusement le fichier _Layout a également des commandes de Html.Action et ils faire apparaissent bien.

Je ne suis vraiment pas sûr de ce que pour vérifier, ou comment confirmer que le pipeline devient le code HTML. Quelqu'un peut-il aider du tout?

Merci!

Était-ce utile?

La solution 3

Le cerveau est une drôle de chose, et malgré avoir passé plusieurs heures hier, il a pris mon chien me réveiller au milieu de la nuit pour un petit pour mon subconscient à tomber par hasard sur la réponse.

Si ce quelqu'un d'autre avait déconcerté, je ne suis pas surpris. Je ne l'avais pas mentionné parce qu'il me avait pas compris que j'utilisais un système de mise en cache niveau partiel similaire à celui conçu par Steve Sanderson. Il m'a frappé soudainement que cela pourrait être la cause, car au mieux de mes connaissances pages Razor passent par beaucoup moins de traitement pipeline que les pages WebForm. Le filtre de mise en cache est probablement pas fait ce qu'il doit faire, ou au bon moment.

Je l'ai confirmé que commentant le filtre OutputCache sur les actions en question a résolu le problème.

Je ne sais pas si ce problème est vrai de la mise en cache au niveau de la page ce n'est pas quelque chose que je trouve utile.

Autres conseils

Mettre une mise en page = null sur la vue partielle et il fonctionne très bien.

Essayez ceci:

@ {Html.RenderAction ( "LatestBlogsMainPanelWidget", "Blogs");}

Alors que la recherche de solutions ce problème, je trouve trois questions de mesure pour ne pas bon rendu des Html.Action et Html.RenderAction. S'il vous plaît vérifier que vous avez fait ci-dessous les choses correctement ou non.

  1. Dans votre PartialView ou Voir que vous avez défini @ {Mise en page = null;} .
  2. Utilisez le retour PartialView au lieu de Afficher .
  3. Décorez votre action [ChildActionOnly] attributs.

J'espère en appliquant toutes les mesures ci-dessus, vous pouvez résoudre vos problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top