2012-02-21 24 views
6

Estoy usando desde la validación de atributos en mi proyecto.Cómo establecer/eliminar atributos dinámicamente en C#?

[Required(ErrorMessage = "DepartmentCode is Required")] 
public string DepartmentCode { get; set; } 

En algunos casos DepartmentCode no es necesario. ¿Cómo puedo ignorar dinámicamente la validación en mi caso?

+0

Si no es necesario en algunos casos, ¿por qué establece un atributo? Los atributos son estáticos, ¿por qué no crear una propiedad o algo así? –

+1

En su código, podría llamarse * departmant *, pero su mensaje de error definitivamente debería llamarlo * departamento *. – spender

+0

@ H.B. De hecho, mi negocio cambió en un caso ... En otro caso, se requiere esta propiedad ... –

Respuesta

0

Eliminaría RequiredAttribute de su modelo y lo verificará una vez que haya golpeado su controlador y lo verifique contra cualquier causa que no sea necesario.

Si se cae en un caso en el que se requiere y el valor no se rellena, añadir el error a la ModelState manualmente

ModelState.AddModelError("DepartmantCode", "DepartmantCode is Required");

Usted acaba de perder la validación del lado del cliente de esta manera

1

Tome un vistazo a: Remove C# attribute of a property dynamically

de todos modos creo que la solución adecuada es heredar un atributo de RequiredAttribute y anular la Validate() método (para que pueda verificar cuándo se requiere ese campo o no). Puede verificar la implementación CompareAttribute si desea mantener la validación del lado del cliente funcionando.

0

Tengo alrededor de este tema en el modelo, en algunos casos no es ideal, pero es la forma más barata y más rápida.

public string NonMandatoryDepartmentCode 
{ 
    get 
    { 
     return DepartmentCode; 
    } 
    set 
    { 
     DepartmentCode = value; 
    } 
} 

Utilicé este enfoque para MVC cuando un modelo base que heredé contenía atributos que deseaba anular.

Cuestiones relacionadas