Pregunta

Estamos utilizando XVal y la DataAnnotationsValidationRunner norma describe aquí a errores de validación obtener de nuestros objetos de dominio y los modelos de vista de ASP.NET MVC. Me gustaría tener una manera de tener ese corredor de validación identificar cuando dos propiedades no coinciden con el uso de DataAnnotations personalizados.

En este momento estoy obligado a hacerlo fuera del corredor, de esta manera:

if (!(model.FieldOne == model.FieldTwo))
    errors.Add(new ErrorInfo("FieldTwo", "FieldOne must match FieldTwo", model.FieldTwo));

Mi pregunta es: ¿se puede hacer esto mediante atributos de validación a nivel de propiedad, o estoy obligado a usar los atributos de nivel de clase (en cuyo caso, tendría que modificar el corredor ... y mi seguimiento pregunta sería ser la mejor manera de recuperarlos en ese caso).

Gracias!

ACTUALIZACIÓN: que finalmente descubierto la manera de escribir la consulta objeto de implementar la sugerencia de la respuesta seleccionada; Me ConCat los resultados de esta consulta con el resultado de que el corredor de validación estándar, si alguien tenía curiosidad. Tenga en cuenta que he cambiado el TypeId a ser la propiedad de campo de confirmación.

var classErrorQuery =
      from attribute in
          instance.GetType().GetCustomAttributes(typeof (ValidationAttribute), false).Cast
          <ValidationAttribute>()
      where !attribute.IsValid(instance)
      select new ErrorInfo(attribute.TypeId.ToString(), attribute.FormatErrorMessage(string.Empty), instance);
¿Fue útil?

Solución

Escribir un atributo CompareTo DataAnnotation

y también se puede comprobar el AccountMOdel en el proyecto predeterminado de MVC2, hay un atributo PropertiesMustMatchAttribute aplica a la ChangePasswordModel para validar que el contraseñaNueva y ConfirmPassword Partido

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