¿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
ControllerContext
que lasFindView
necesidades 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
ViewEngines
propiedad ya no existe, así que tenemos que usar elICompositeViewEngine
servicio. Esta es una variante de la respuesta aceptada usando la inyección de dependencia:Para los curiosos: La interfaz base
IViewEngine
no está registrada como un servicio por lo que debemos inyectar en suICompositeViewEngine
lugar. SinFindView()
embargo, el método lo proporcionaIViewEngine
para 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