Comment puis-je spécifier différentes Mises en page à l'ASP.NET Core, MVC
Je voudrais avoir séparer les 2 Mises en dans ma demande. Disons que l'un est pour la partie Publique du site et l'autre est vide pour des raisons que nous avons besoin.
Avant de Cœur, je pourrais faire cela pour définir un filtre:
public class LayoutInjecterAttribute : ActionFilterAttribute
{
private readonly string _masterName;
public LayoutInjecterAttribute(string masterName)
{
_masterName = masterName;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResult;
if (result != null)
{
result.MasterName = _masterName;
}
}
}
Maintenant la ViewResult n'ont pas le MasterName de la propriété. Est-il possible de faire maintenant, et de ne pas l'utiliser dans la Vue de la définition de la structure.
OriginalL'auteur Wasyster | 2016-10-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez toujours faire quelque chose de très similaire à votre approche originale, à l'aide de
ViewData
passer dans le nom du modèle (Bien que je voudrais créer un Résultat De Filtre):Puis dans le
_ViewStart.cshtml
fichier:Enfin, en supposant que vous créez une nouvelle présentation comme
Views/Shared/_CleanLayout.cshtml
, vous pouvez utiliser cet attribut sur un contrôleur ou de l'action:OriginalL'auteur Daniel J.G.
C'est la façon dont je suis l'aide de plusieurs mises en page dans mon ASP.NET core application MVC.
Vous pouvez essayer comme ceci-
Dans
_ViewStart.cshtml
spécifier des valeurs par défaut _Layout comme celui-Si vous souhaitez mettre en page la mise en page spécifique, alors dans ce
page.cshtml
, vous pouvez attribuer un autre point de vue, comme celui-Voir si cela aide.
Fonctionne pour moi, l'autre approche semble être une douleur dans le cul.
OriginalL'auteur Sanket
Si vous voulez avoir une mise en page différente basée sur une condition, vous pouvez utiliser ce code dans le
_ViewStart.cshtml
fichier:- Je l'utiliser dans un de mes projets. Dans mon cas, la condition est
User.IsInRole("admin")
et mon_ViewStart.cshtml
fichier est comme suit:Puisqu'il y a seulement deux rôles dans mon projet, ce qui résulte en une seule condition, cette solution de contournement n'est pas trop mal dans mon cas. J'espère que quelqu'un dans une situation similaire trouverez cela utile 🙂
si vous utilisez un Rasoir, il devrait être disponible par défaut. L'intellisense devrait même monter avec la suggestion (c'est au sein de Visual Studio 2015+ que je suis au courant). Laissez-moi savoir si vous rencontrez des problèmes pour accéder à ce que je puisse vous donner un coup de main
C'est exactement ce que je veux faire, sauf que je veux mettre en cache le résultat de l'Utilisateur.IsInRole("admin") pour les utilisateurs de la session afin de ne pas le feu pour chaque demande (laisser juste le récupérer dans la session pour chaque requête). J'ai mis en place mon propre "SessionCacheService" où j'ai quelques pré-définis des variables de session, ne serait-ce service sera disponible dans le ViewStart.cshtml fichier? Mettre l'injection de dépendance pour ce service à la ViewStart.cshtml?
Vous pouvez faire référence à toute la classe dans le projet à partir de l'intérieur d'une vue à l'aide de '@'. Disons que votre projet "Monprojet" a "SessionCacheService" dans un dossier appelé "Cache"; vous pouvez y faire référence dans n'importe quelle vue (y Compris ViewStart.cshtml) à l'aide de '@MyProject.Le Cache.SessionCacheService'. Cela vous aide?
OriginalL'auteur demonicdaron
Vous pouvez utiliser
IViewLocationExpander
interface pour rendre l'affichage que vous souhaitez.Veuillez consulter ce lien Travailler avec IViewLocationExpander en mvc pour plus de détails
Ce qui concerne,
Rohit
OriginalL'auteur XamDev
Dans ASP.NET Core 2.0, j'ai été inspiré par la réponse de @Daniel J. G.
J'ai fait un
ViewLayoutAttribute
:Exemple de contrôleur de classe:
Et j'ai créé une extension pour obtenir cet attribut à partir de la
ViewContext
:Et dans
_ViewStart.cshtml
:OriginalL'auteur Jeremy F.