sábado, 7 de febrero de 2015

Modelos, modelos... ojo con los modelos!!!!!

El día de hoy estaba terminando una implementación, para la interfaz de un proyecto en MVC. Consiste en un módulo que lee una tabla en una base de datos de una aplicación de integración y la idea es que esta tiene una configuración que se trabaja desde mi portal.

Tenía entonces un lindo ViewModel encargado de llevar la información de la vista al controlador... esa carreta la conocen verdad? en caso que la respuesta sea un no, visiten el siguiente link.

Bueno, todo iba de perlas hasta que tuve que hacer la parte POST del controlador. Al ejecutar el submit me aparecía el siguiente error:


me devané los sesos buscando la solución al problema y como en la mayoría de mis errores, era una cosa muy pequeña.

Supongamos que uds manejan un viewmodel para la comunicación que tiene un constructor de tipo:

public MyViewModel(MyObjectType myViewModel)
        {
            Property1 = myViewModel.Property1;
            Property2 = myViewModel.Property2;
            Property3 = myViewModel.Property3;
        }

Bien, en caso que ese sea su único constructor, MVC se enloquece buscando uno sin parámetros (aún no entiendo a ciencia cierta muy bien el por qué). Bueno la solución es super sencilla. Solo es necesario crear un constructor vacío (o por lo menos uno sin parámetros) de la siguiente manera:

public MyViewModel()
{
}

de este modo al tener el constructor vacío, todo funciona correctamente.

Dicen por ahí... "hasta ahí, normal."

Ahora, por qué me tomó tanto tiempo encontrar el error? Bien, un problema que sucede muy a menudo es cuando un ViewModel en nuestra aplicación tiene más ViewModel's uno dentro de otro, es decir un ViewModel anidado. Cuando estos modelos tienen cierta complejidad, la cosa se pone aún más difícl de detectar.

Bueno, si hubiese tenido en cuenta ese pequeño detalle en el ViewModel, seguramente no hubiese sido víctima de esa improductiva labor de encontrar el bug.

Así que tengan cuidado mis amigos... este tipo de situaciones nos conllevan mucho tiempo de solución y normalmente el problema es una bobada.

Como siempre, siéntanse en total libertad de comentar.

Un Abrazo

PiojoDev

No hay comentarios:

Publicar un comentario