viernes, 21 de enero de 2022

Formulario en muddialog en linea y parpadeos

 Sintomas

Usas el componente Dialog de MudBlazor para abrir un formulario simple, el problema es que cada vez que teclean algo el formulario parpadea.

Detalles

  • El código del dialogo lo has incluido en línea, usando la propiedad visible del componente
  • Los campos tiene validación simple (requerido y máxima longitud).

Motivo

Por algún motivo al validar cada tecla se lanza un renderizado de página y el dialogo realiza la transición de apertura.

Solución (o parche)

Debes detener el renderizado con una variable y sobrecargando el evento 

        private bool _renderizar = true;
        protected override bool ShouldRender()
        {
            return _renderizar && base.ShouldRender();
        }

El valor de _renderizar debe cambiar a falso después de haber renderizado el dialogo, para lo que usamos el evento IsVisibleChanged del componente muddialog

<MudDialog IsVisible="@visible" Options="opcionesDlg" IsVisibleChanged="CambioVisibleDialogo">...

private void CambioVisibleDialogo(bool visible)
{
    if (visible) _renderizar = false;
}

Deberemos reactivar el renderizado antes de ocultar el dialogo, por ejemplo:

<MudIconButton Icon="@Icons.Material.Outlined.Cancel 
       OnClick="@(()=>{_renderizar=true; visible=false;})"/>


miércoles, 5 de enero de 2022

Mayúsculas, Minúsculas y "Exception: '<' is an invalid start of a value" en ReadFromJsonAsync (Blazor)

 Sintomas

La operación de conversión JSON a Objeto 

_datos = await q.Content.ReadFromJsonAsync<EdiProyecto.Edicion>()

Provoca el error 

"Exception: '<' is an invalid start of a value"

Por experiencia supones que está recibiendo Html en lugar de JSON, revisas la petición

var q = await Http.GetAsync($"API/Proyectos/{Id}");

Escribes en el navegador  loalhost:23234API/proyectos/ 22 y recibes JSON

¿Qué pasa?

Causa y Solución

El nombre de controlador en la URL de WEBAPI debe estar en minúsculas.

var q = await Http.GetAsync($"API/proyectos/{Id}");