Où sont les ControllerContext et ViewEngines propriétés dans MVC 6 Contrôleur?
J'ai créé un nouveau MVC6 projet et la construction d'un nouveau site. Le but est d'obtenir le résultat du rendu d'une vue. J'ai trouvé le code suivant, mais je ne peux pas le faire fonctionner car je ne peux pas trouver le ControllerContext
et la ViewEngines
.
Voici le code que j'ai envie de réécrire:
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
- est-ce code à l'intérieur d'un contrôleur? ViewEngines et ControllerContext sont dans le Système.Web.Mvc.. ControllerBase a aussi une propriété de ControllerContext
- C'est pour MVC6 qui n'a pas de ces.
- passons.. besoin de l'étiquette de mon échantillon de projets de mieux 🙂
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, nous pouvons tirer parti de l'intégré dans l'injection de dépendance qui vient avec ASP.Net MVC de Base qui va nous donner la
ICompositeViewEngine
objet, nous devons rendre notre point de vue manuellement. Ainsi, par exemple, un contrôleur devrait ressembler à ceci:Ensuite, le code fait, nous avons besoin de rendre un avis. Notez qu'il est maintenant un
async
méthode que nous allons faire des appels asynchrones en interne:Et pour appeler la méthode, c'est aussi simple que cela:
Resolver
:/ICompositeViewEngine
ne contient plus deFindPartialView
🙁 donc, de nombreuses modifications importantes...Libérés dotnet core 1.0 a changé, cette version du code ci-dessus fonctionne avec 1.0 RTM.
Ces de l'usage sont nécessaires pour que ce code compile:
J'ai également eu à ajouter un DI interfaces du contrôleur constructeur:
Mon compte constructeur ressemble à ceci maintenant:
De la solution fournie par Martin Tomes travaillé pour moi, mais j'ai dû remplacer:
avec
Également dans le contrôleur constructeur a dû ajouter
Solution par Martin Tomes fonctionne bien. Mes modifications: suppression de fournisseur de services et d'obtenir ICompositeViewEngine dans le constructeur de la via DI.
Constructeur ressemble:
et mettre
au lieu de
J'ai suivi vos conseils, et comme ça, ajout de la méthode dans mon contrôleur de base, adopté moteur d'affichage du régulateur de courant, de sorte qu'il est facile à utiliser où que je puisse en avoir besoin:
leVisual Studio (Cliquez sur l'image pour l'agrandir)