Comment puis-je avoir une vue rendre un partiel (contrôle utilisateur) à partir d'un dossier différent? Avec l'aperçu 3, j'avais l'habitude d'appeler RenderUserControl avec le chemin complet, mais avec la mise à niveau vers l'aperçu 5, ce n'est plus possible. Au lieu de cela, nous avons obtenu la méthode RenderPartial, mais elle ne m'offre pas les fonctionnalités que je recherche.
c#
asp.net-mvc
renderpartial
Boris Callens
la source
la source
FindPartialView
méthode avec quelque chose commeif(partialViewName.Contains"/")partialViewName="~/Views/"+partialViewName;
Dans mon cas, j'utilisais MvcMailer (https://github.com/smsohan/MvcMailer) et je voulais accéder à une vue partielle à partir d'un autre dossier, qui n'était pas dans "Shared". Les solutions ci-dessus n'ont pas fonctionné, mais l'utilisation d'un chemin relatif l'a été.
la source
Si vous utilisez cet autre chemin la plupart du temps, vous pouvez le corriger définitivement sans avoir à spécifier le chemin tout le temps. Par défaut, il recherche les vues partielles dans le dossier View et dans le dossier Shared. Mais dites que vous voulez en ajouter un.
Ajoutez une classe à votre dossier Modèles:
Ensuite, dans votre fichier Global.asax.cs, ajoutez la ligne suivante:
la source
Pour un contrôle utilisateur nommé myPartial.ascx situé dans le dossier Views / Account, écrivez comme suit:
la source
J'ai créé une solution de contournement qui semble fonctionner assez bien. J'ai trouvé la nécessité de basculer vers le contexte d'un autre contrôleur pour la recherche de nom d'action, la recherche de vue, etc. Pour implémenter cela, j'ai créé une nouvelle méthode d'extension pour
HtmlHelper
:ControllerContextRegion
est défini comme:La façon dont cela est utilisé dans une vue est la suivante:
Il peut y avoir des effets secondaires indésirables si votre code nécessite que le
controller
composant route ne change pas, mais dans notre code jusqu'à présent, il ne semble pas y avoir de points négatifs à cette approche.la source
Le VirtualPathProviderViewEngine, sur lequel le WebFormsViewEngine est basé, est censé prendre en charge les caractères "~" et "/" à l'avant du chemin afin que vos exemples ci-dessus devraient fonctionner.
J'ai remarqué que vos exemples utilisent le chemin "~ / Account / myPartial.ascx", mais vous avez mentionné que votre contrôle utilisateur se trouve dans le dossier Views / Account. As-tu essayé
ou est-ce juste une faute de frappe dans votre question?
la source
Pour les lecteurs utilisant ASP.NET Core 2.1 ou version ultérieure et souhaitant utiliser la syntaxe Partial Tag Helper , essayez ceci:
Le tilde (~) est facultatif.
Les informations sur https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-3.1#partial-tag-helper sont également utiles.
la source
vous devriez essayer ceci
placez
~/Views/
devant votre codela source
Créez un moteur de vue personnalisé et disposez d'une méthode qui renvoie un ViewEngineResult Dans cet exemple, vous venez de remplacer le
_options.ViewLocationFormats
et d'ajouter votre répertoire de dossiers:Exemple: https://github.com/AspNetMonsters/pugzor
la source
Essayez d'utiliser
RenderAction("myPartial","Account");
la source