Comment puis-je modifier l'ensemble de la ASP.NET le contenu de la page à droite avant sa sortie?
J'ai une page qui a un tas de commandes de l'utilisateur. Je veux être en mesure d'avoir des "macros" ou "espaces réservés" directement dans le contenu qui seront remplacés dans mon code. Il ne devrait pas vraiment d'importance, mais je suis en utilisant Ektron que mon CMS.
Y a des événements que je peux crochet en faire une chaîne de remplacement sur l'ensemble de rendu de contenu de la page, juste avant d'être envoyé au client?
Mise à JOUR
Voici le code que j'utilise actuellement pour ce faire:
protected override void Render(HtmlTextWriter writer)
{
string content = string.Empty;
using (var stringWriter = new StringWriter())
using (var htmlWriter = new HtmlTextWriter(stringWriter))
{
//render the current page content to our temp writer
base.Render(htmlWriter);
htmlWriter.Close();
//get the content
content = stringWriter.ToString();
}
//replace our placeholders
string newContent = content.Replace("$placeholder1$", "placeholder1 data").Replace("$placeholder2$", "placeholder2 data");
//write the new html to the page
writer.Write(newContent);
}
OriginalL'auteur John Bubriski | 2009-10-16
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de substitution de la méthode render?
vous n'êtes jamais "réinitialiser" le flux de, car il n'a pas été envoyé encore. Je ne suis pas certain si son sage, non, j'ai juste répondu à la question lol
Je suis à l'aide de cette méthode dès maintenant, mais vous attendez à accepter la réponse pour voir si il y a une meilleure solution. Fondamentalement, je... Laisser la page à écrire pour un temp de la mémoire tampon. Modifier la mémoire tampon. Remplacer le tampon d'origine avec celui modifié.
J'ai posté mon code qui est essentiellement ce que vous faites.
ce qui est tmpWriter?
OriginalL'auteur JustLoren
Je sais que cette réponse ne va pas les aider, puisque vous avez déjà résolu ce problème et se sont déplacés. C'est juste pour les personnes qui devront faire face à un problème similaire dans le futur 😉
Il existe deux approches que vous pouvez utiliser.
Ceci est similaire à la accepté
réponse. Mais je le recommande
substitution de la méthode render dans un
BasePage et de tirer sur tous vos
modèles à partir de ce.
Utiliser un HttpModule ou le Mondial.asax et
joindre une Filtre pour la Réponse
objet. Pour moi, ce plus de
sens de l'esthétique, car le "Filtre"
la propriété est censé pour vous aider à
filtre à la sortie, ce qui est exactement
ce que vous voulez!
BTW, comment ça va avec Ektron jusqu'à présent? Ils sont me rend fou, c'est sûr!
Oh oui... Ektron... personnellement, je n'aime pas ça. L'ensemble du produit est le cul-arrière. Leur API est moche, et très compliquées. L'ensemble du produit est buggé, mais le code est caché de sorte que vous n'avez aucun espoir d'essayer de comprendre ce qu'ils essayaient de faire. Leurs forums de soutien ne sont pas très bonnes. Si vous êtes à la recherche d'un nouveau CMS, je vous recommande de Kentico. Pour la plupart, vous n'avez pas à écrire de code. Mais lorsque vous écrivez du code, de leur API est génial! Le seul problème que j'ai avec Kentico est que leur système de mise en cache est source de confusion, et, par défaut, pas d'installation de façon intelligente.
OriginalL'auteur madaboutcode
Avez-vous regardé le pré-rendu de l'événement dans le cycle de vie?
Je crois que c'est le dernier endroit où vous pourriez faire quelque chose comme cela. Le prochain événement est SaveStateComplete, qui, selon la documentation a ce comportement:
OriginalL'auteur Aaron Daniels
La solution simpliste qui vient à l'esprit est d'utiliser asp:Littéral contrôles de votre "espaces réservés". Vous pouvez définir leur contenu pendant le chargement de la page, ou vous pouvez brancher dans le pré-rendu de l'événement et les mettre ensuite.
Désolé, j'ai raté le "contrôle de l'utilisateur", my bad. Les contrôles de l'utilisateur ont pré-rendu des événements. Vous devriez être capable de mettre propriétés publiques sur vos commandes de l'utilisateur que la page puisse être défini, alors les commandes de l'utilisateur de faire la substitution.
OriginalL'auteur Cylon Cat
Il semble que vous pourriez voulez avoir des littéraux HTML dans votre page et alors vous pouvez simplement remplacer avec le contenu approprié sur l'événement Page_Load.
Cela va vous obliger à écrire de code HTML, par opposition à un simple texte, mais il semble que vous peut-être injecter votre propre code JavaScript ou là, ce sera excellent travail.
OriginalL'auteur Dillie-O