es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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);
}

}
Tags:  ,

Answer

  1. Avatar for 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.

Comments are closed.