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.

blazor devuelve RenderFragment ‘__builder’ que no existe en el contexto actual.

Estoy tratando de devolver un RenderFragment desde un método privado de un componente, pero estoy recibiendo el error de compilación:

'__builder' no existe en el contexto actual

Aquí está el código mínimo que muestra el problema:

<div>
    @RenderButton(1)
</div>

@code {
    private RenderFragment RenderButton(int number)
    {        
        return builder =>
        {
            <button type="button">@number</button>
        };
    }
}

Parece que esto podría no ser posible o permitido, si no, ¿hay alguna manera de evitar tener que escribir el mismo código de renderización? Digamos que necesito usar este método RenderButton en múltiples bucles y bloques de condición.

Edit: la única solución que se me ocurre ahora es crear un componente para cada uno de estos métodos RenderFragment.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que la variable builder no está definida en el ámbito del método RenderButton. En realidad, esta variable es proporcionada por el tiempo de ejecución de Blazor cuando se está representando un componente. Por lo tanto, no se puede usar en un método privado de su componente.

    Para evitar tener que escribir el mismo código de renderizado varias veces, puede crear un componente separado que encapsule la lógica de renderización que necesita. Este nuevo componente se puede utilizar en varios lugares de su aplicación.

    Por ejemplo, podría crear un nuevo componente llamado ButtonRenderer que tome un parámetro número y represente el botón correspondiente:

    <button type="button">@Number</button>
    
    @code {
        [Parameter]
        public int Number { get; set; }
    }
    

    Luego, puede utilizar este nuevo componente en su componente original de la siguiente manera:

    <div>
        <buttonrenderer number="1"></buttonrenderer>
    </div>
    
    @code {
    
    }
    

    De esta manera, puede reutilizar la lógica de renderizado sin tener que escribirla varias veces.

Comments are closed.