J'ai mis en place un moteur de vision multi-locataires similaire à ce qui est décrit ici:
qui permettez-moi de remplacer les emplacements de recherche de la vue comme ceci: p> dans lequel le % 1 code> est remplacé par le Dossier correct pour le locataire actif. Cela fonctionne juste une excellente exception un problème. Quand je défini le chemin de la mise en page sur mon point de vue comme ceci: P>
Layout = Html.GetLayoutPageForTenant( "_Home" );
3 Réponses :
Je voudrais proposer l'idée suivante,
dans le fichier ou p> si Vous avez des représentations de données de locataire statiques, telles qu'une catégorie statique s'il vous plaît Partagez votre idée sur cette implémentation afin que ce soit utile pour la communauté p> p> _viewstart.cshtml code>, où nous définissons les pages de mise en page, vous pouvez utiliser quelque chose comme celui-ci, avec l'idée du locataire basé sur celui-ci. L'URL de la mise en page ou le nom du dossier est en cours d'exécution dans le contrôleur en récupérant à partir du dB. p>
identité code> qui gardera une trace de la personnalisation de votre locataire, nous pouvons l'utiliser et minimiser le voyage aller-retour à la DB. P>
Le seul problème que j'ai avec cette approche est que tous les locataires auront leurs propres pages de mise en page personnalisées. Je souhaite toujours que la recherche soit par défaut dans le dossier par défaut si une page de mise en page personnalisée n'est pas trouvée.
@SparaRaFusile: Étant ce cas, nous pouvons avoir un identifiant de secours dans le cahier de vie. Donc, dans le maître, nous vérifierons si le locataire dispose d'une page de mise en page personnalisée, si nous pourrons définir ce dossier dans le sac Afficher, sinon nous définirons le nom du dossier du locataire. ViewBag.TenantFoldolderName = "Defaultpath"; Si (locataire a personnalisé) {ViewBag.TenantFolderName = TenantfolderName; } code> IMHO, cela sera sécurisé.
Bien que je suis d'accord, cela pourrait fonctionner, il est en quelque sorte défaite le but du moteur de vue personnalisé de faire tout le travail dans le contrôleur. Je continuerai à chercher une solution plus élégante.
Bien sûr, nous attendrons une meilleure solution. Je vais aussi apprendre de cela.
Bien que je n'ai pas fini par utiliser votre réponse directement, notre discussion m'a poussé dans la direction dont j'avais besoin. Merci.
@SparaFusile: Merci à vous aussi pour partager vos idées. Si vous n'hésitez pas à partager la logique que vous avez implémentée, veuillez partager avec nous.
essayer,
Vous pouvez ajouter suivant _viewstart.cshtml code> dans le dossier Vues du locataire (
~ / vues /% 1 / _viewstart.cshtml code>). Chaque locataire peut gérer leurs propres fichiers de mise en page.
@{
Layout = VirtualPathUtility.GetDirectory(PageContext.Page.VirtualPath) + "Shared/_Layout.cshtml";
}
C'est une idée intéressante, mais je souhaite pouvoir utiliser une mise en page personnalisée avec des vues par défaut et / ou utiliser la mise en page par défaut avec des vues personnalisées. À moins que je comprenne mal votre réponse, je ne peux pas le faire avec votre code.
@SparaFusile Vous pouvez le faire, vous pouvez mettre _viewstart.cshtml code> dans n'importe quel dossier dont vous avez besoin pour personnaliser, vous pouvez le mettre en dossier de contrôleur ou dans le dossier par défaut. Par défaut, dossier du contrôleur de recherche de moteur de Razor pour la page de démarrage (
_viewstart.cshtml code>) S'il ne peut pas rechercher, essayez le dossier parent et ainsi de suite jusqu'à la racine de l'application.