12
votes

Manutention Propriétés de la mise en page avec moteur de vue de rasoir personnalisé

J'ai mis en place un moteur de vision multi-locataires similaire à ce qui est décrit ici:


0 commentaires

3 Réponses :


4
votes

Je voudrais proposer l'idée suivante,

dans le fichier _viewstart.cshtml , 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. xxx

ou xxx

si Vous avez des représentations de données de locataire statiques, telles qu'une catégorie statique identité qui gardera une trace de la personnalisation de votre locataire, nous pouvons l'utiliser et minimiser le voyage aller-retour à la DB.

s'il vous plaît Partagez votre idée sur cette implémentation afin que ce soit utile pour la communauté


6 commentaires

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; } 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.



1
votes

essayer, xxx


0 commentaires

0
votes

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";
}


2 commentaires

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 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 ) S'il ne peut pas rechercher, essayez le dossier parent et ainsi de suite jusqu'à la racine de l'application.