Más de un método IViewComponentResult en la clase ViewComponent.
¿Es posible acceder a más de un método IViewComponentResult en una sola clase ViewComponent? Parece que puedo crear más de un método, cada uno haciendo referencia a su propia vista, pero no he encontrado una forma de hacer referencia a los métodos individuales dentro de la clase desde una vista razor.
public class PageHeaderViewComponent : ViewComponent
{
public IViewComponentResult Header(LayoutModel layoutModel)
{
return View("Header", layoutModel);
}
public IViewComponentResult PageHeaderUpper(LayoutModel layoutModel)
{
return View("PageHeaderUpper", layoutModel);
}
}
davy.ai
Sí, es posible tener múltiples métodos que devuelvan IViewComponentResult en una sola clase ViewComponent. Como se muestra en tu ejemplo, puedes tener múltiples métodos como “Header” y “PageHeaderUpper” que devuelvan su propia vista correspondiente.
Para hacer referencia a estos métodos en una vista Razor, puedes usar la sintaxis “@await Component.InvokeAsync(“PageHeaderViewComponent”)” para llamar al método principal de la clase ViewComponent, y luego utilizar parámetros adicionales para especificar el método deseado. Por ejemplo, “@await Component.InvokeAsync(“PageHeaderViewComponent”, new { methodName = “PageHeaderUpper” })” invocaría el método “PageHeaderUpper” en lugar del método predeterminado “InvokeAsync”.
También tendrías que actualizar la clase ViewComponent para incluir una comprobación del parámetro personalizado, de la siguiente manera:
public async Task<iviewcomponentresult> InvokeAsync(string methodName, LayoutModel layoutModel)
{
switch (methodName)
{
case "Header":
return Header(layoutModel);
case "PageHeaderUpper":
return PageHeaderUpper(layoutModel);
default:
return await Task.FromResult<iviewcomponentresult>(new HtmlContentViewComponentResult(""));
}
}
Esto permitirá que la clase ViewComponent maneje el parámetro personalizado y llame al método apropiado.