Pregunta

Estoy tratando de averiguar la mejor manera de validar los datos dentro de una aplicación MVC # C y XVal parecía ser el mejor ajuste. Sin embargo estoy corriendo en un problema con la validación de tipo de datos.

Al principio yo estaba haciendo un UpdateModel en el DTO y luego ejecutar la validación en el DTO. Esto funcionó muy bien para cosas como los campos requeridos, sin embargo UpdateModel podría lanzar una excepción si se trató, por ejemplo, para asignar una cadena ( "TEA") en un campo decimal. Desde UpdateModel había que corrió antes de que hubiera datos para validar No estaba segura de cómo conseguir alrededor de eso.

Mi solución fue crear un DTO por forma que UpdateModel sería copiar en, validación ejecutar en eso y, a continuación, copiar los valores hacia los dtos adecuados. Todos los atributos de la forma DTO serían cuerdas para UpdateModel nunca bombas a cabo, y me gustaría hacer cumplir la validación de datos a través XVal. Sin embargo, mientras que las reglas son similares requeridos patadas, me parece que no puede conseguir la regla Tipo de datos que entran en juego (en este caso tratando DataType.Currency).

Yo tenía también intentó conseguir la validación del lado del cliente para que funcione, pero esperaba que hubiera una manera limpia para hacer la validación del lado del servidor de tipos de datos.

Lo que otros hechos con respecto a la validación de tipos de datos en el lado del servidor?

¿Fue útil?

Solución

Lo que terminé haciendo fue la creación de algunos dtos que representan las formas. Estos dtos tomarían un Request.Form y automáticamente en el mapa todos los valores del formulario en las propiedades internas de correo electrónico (ex cadena pública, Nombre cadena pública) sobre la base de los cuales es el mismo nombre que los valores del formulario.

Tendrían todas las propiedades de cadena y me gustaría poner los atributos de XVal en ellos. Entonces haría uso de XVal y expresiones regulares para asegurarse de que los datos que vienen en era válida (por ejemplo, una fecha válida, correo electrónico, número, etc.). De esta manera nunca sería una excepción lanzada porque siempre iba en una cadena, en contraposición a .Net intentar analizar en una cita o algo así.

Esto se aseguraría de que los datos siempre se hicieron a XVal donde podría ejecutar la validación que quiero, y después convertirlo en el tipo adecuado como DateTime una vez que sé que tengo datos válidos.

Otros consejos

Estoy usando validadores personalizados derivados de ValidationAttribute para la validación de los datos que deben analizarse en el lado del servidor de la cadena a otros tipos de datos. Por ejemplo:

public class DateAttribute : ValidationAttribute
    {

        public override bool IsValid(object value)
        {
            var date = (string)value;
            DateTime result;
            return DateTime.TryParse(date, out result);
        }
    }

También he encontrado una manera de convertir dicha validación de atributos en el lado del cliente y la validación del lado del servidor atributos sin necesidad de escribir código JavaScript personalizado. Sólo tengo que derivar de una clase base atributo de validación diferente. Echar un vistazo a mi Blog artículo sobre la validación del lado del cliente Si desea aprender más acerca de esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top