MVC 5 Render View to String
Il semble, la plupart du code pour le rendu de la vue sur la chaîne ne fonctionne pas dans MVC 5.
J'ai plus tard MVC 5.1.2 modèles et je suis en train d'essayer de rendre la vue en chaîne.
public static String RenderViewToString(ControllerContext context, String viewPath, object model = null)
{
context.Controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindView(context, viewPath, null);
var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(context, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
Bien, c'est un travail, mais sa sortie contient beaucoup de $ marques au lieu des balises. J'ai lu quelque chose à ce sujet a été corrigé dans la version RC, mais c'est de vieilles nouvelles.
Problème ressemble à ceci
<$A$><h1></h1>
<table</$A$><$B$> class=""</$B$><$C$>> <tbody</$C$><$D$></$D$><$E$>></tbody>
</table></$E$>
Je voudrais vous demander, comment avez-vous rendu des vues de la chaîne dans la dernière MVC 5 modèle ?
Merci.
source d'informationauteur wh1sp3r
Vous devez vous connecter pour publier un commentaire.
Ok, me semble que je trouve une solution. Auteur de l'idée est Yakir Manoir.
C'est un truc avec de faux contexte et de la réponse.
Exemple:
Mon fichier MyHTMLView.cstml est stocké dans les Vues/e-Mail/MyHTMLView.cshtml. E-mail est un faux contrôleur de nom.
qui suit est la solution qui fonctionne avec de la session et les zones de MVC5.
voici comment vous appelez cela à partir d'un autre contrôleur
à l'aide de requestcontext on peut facilement passer de la session en cours dans fakecontroller et de rendre rasoir chaîne.
J'ai eu un besoin immédiat de retour 6 vues partielles comme des chaînes de caractères dans un objet JSON. Au lieu de créer une méthode statique, et le passage de tous les paramètres inutiles, j'ai décidé d'ajouter protégé méthodes à notre ControllerBase classe qui dérive de Contrôleur, et est utilisée comme classe de base pour l'ensemble de nos contrôleurs.
Ici, c'est un ControllerBase classe qui fournit cette fonctionnalité, et fonctionne de manière très similaire à la PartialView() et() les méthodes qui sont dans la classe du Contrôleur. Il comprend les ajouts de @Alok.
@wh1sp3r réponse fonctionne, mais pour les vues partielles que j'avais à faire les petites modifications suivantes: