¿Es posible determinar si existe un nombre de vista específico desde dentro de un controlador antes de renderizar la vista?
Tengo el requisito de determinar dinámicamente el nombre de la vista a representar. Si existe una vista con ese nombre, entonces necesito renderizar esa vista. Si no hay vista por el nombre personalizado, entonces necesito representar una vista predeterminada.
Me gustaría hacer algo similar al siguiente código dentro de mi controlador:
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
fuente
fuente

Respuestas:
Para aquellos que buscan un método de extensión de copiar / pegar:
fuente
¿Qué tal si prueba algo como lo siguiente asumiendo que está utilizando un solo motor de visualización?
fuente
Aquí hay otra forma [no necesariamente recomendada] de hacerlo
fuente
ControllerContextque lasFindViewnecesidades de método.Si desea reutilizar esto en varias acciones del controlador, basándose en la solución proporcionada por Dave, puede definir un resultado de vista personalizado de la siguiente manera:
Luego, en su acción, simplemente devuelva una instancia de su vista personalizada:
fuente
Mis 2 centavos.
fuente
En asp.net core 2.x, la
ViewEnginespropiedad ya no existe, así que tenemos que usar elICompositeViewEngineservicio. Esta es una variante de la respuesta aceptada usando la inyección de dependencia:Para los curiosos: La interfaz base
IViewEngineno está registrada como un servicio por lo que debemos inyectar en suICompositeViewEnginelugar. SinFindView()embargo, el método lo proporcionaIViewEnginepara que la variable miembro pueda usar la interfaz base.fuente
Aquí se explica cómo hacerlo en Razor para Core 2.2, etc. Tenga en cuenta que la llamada es "GetView", no "Find View".
fuente