Est-il possible de déterminer si un nom de vue spécifique existe à partir d'un contrôleur avant de rendre la vue?
J'ai besoin de déterminer dynamiquement le nom de la vue à rendre. Si une vue existe avec ce nom, je dois rendre cette vue. S'il n'y a pas de vue par le nom personnalisé, je dois rendre une vue par défaut.
Je voudrais faire quelque chose de similaire au code suivant dans mon contrôleur:
public ActionResult Index()
{
var name = SomeMethodToGetViewName();
// The 'ViewExists' method is what I've been unable to find.
if (ViewExists(name))
{
retun View(name);
}
else
{
return View();
}
}
asp.net-mvc
Andrew Hanson
la source
la source
Réponses:
Pour ceux qui recherchent une méthode d'extension copier / coller:
la source
Pourquoi ne pas essayer quelque chose comme ce qui suit en supposant que vous n'utilisez qu'un seul moteur de vue:
la source
Voici une autre façon [pas nécessairement recommandée] de le faire
la source
ControllerContext
laFindView
méthode.Si vous souhaitez réutiliser ceci sur plusieurs actions de contrôleur, en vous basant sur la solution fournie par Dave, vous pouvez définir un résultat de vue personnalisé comme suit:
Ensuite, dans votre action, renvoyez simplement une instance de votre vue personnalisée:
la source
Mes 2 cents.
la source
Dans asp.net core 2.x, la
ViewEngines
propriété n'existe plus, nous devons donc utiliser leICompositeViewEngine
service. C'est une variante de la réponse acceptée utilisant l'injection de dépendances:Pour les curieux: l'interface de base
IViewEngine
n'est pas enregistrée en tant que service donc il faut injecter à laICompositeViewEngine
place. LeFindView()
procédé est cependant assurée parIViewEngine
si la variable membre peut utiliser l'interface de base.la source
Voici comment procéder dans Razor for Core 2.2, etc. Notez que l'appel est "GetView" et non "Find View"
la source