2012-03-30 16 views
6

Tengo una clase de modelo "País" con la propiedad "CultureId" que NO está marcada como obligatoria. Otra clase "CountryViewModel" tiene la misma propiedad "CultureId".ASP.NET MVC agrega Validación para campos no obligatorios

Al renderizar la vista "Crear", noté que los atributos de datos de validación se agregaron al cuadro de texto "CultureId", aunque no se agregaron anotaciones de datos.

estoy usando

@Html.HiddenFor(mode => mode.CultureId) 

¿Cuál podría ser la causa de este tipo de comportamiento?

Gracias

Respuesta

0

si se puede usar anotaciones de datos, que debe salir este http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

namespace MvcApplication1.Models 
{ 
[MetadataType(typeof(MovieMetaData))] 
public partial class Movie 
{ 
} 


public class MovieMetaData 
{ 
    [Required] 
    public object Title { get; set; } 

    [Required] 
    [StringLength(5)] 
    public object Director { get; set; } 


    [DisplayName("Date Released")] 
    [Required] 
    public object DateReleased { get; set; } 
} 

}

que le ayuda a establecer validaciones sin modelos en el lado de la base de datos.

+0

Su problema no es sobre cómo establecer requerido en una propiedad, sino cómo evitar la validación html no deseada que se está ejecutando. Además, su forma de administrar el atributo es típica de los datos dinámicos, no la forma en que usualmente funciona MVC – themarcuz

+0

, pensé que se anularán las reglas de validación, si la clase de metadatos estará vacía –

12

Supongo que tu CultureId es un int. MVC agrega automáticamente las etiquetas requeridas a tipos de valores que no aceptan valores de nulos.

desactivar esta opción añadir

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

a Application_Start o hacer su int anulable

+0

Ya agregué eso y sigo teniendo el mismo comportamiento. Trataré de hacer el int nullable. Gracias – Bill

+1

Buena respuesta. Funciona para deshacerse de la validación 'data-required', pero como Id es un' int', agrega el 'data-val-number' que aún impide el envío de formularios cuando se intenta crear. Podría solucionarlo estableciendo valores predeterminados como 0, pero no debería hacerlo. – eudaimos

+0

Malo - funciona ya que la validación parece saltear 'data-val-number' para las entradas ocultas – eudaimos

0

probar esto:

ModelState["CultureId"].Errors.Clear(); 

if (ModelState.IsValid)  
    { 
     ..... 
    } 

Si CultureId es int, entonces también le dará el resultado deseado ...

+1

Esto es un poco complicado que evita el problema real involucrado aquí. Ver la [respuesta de dskh para más] (http://stackoverflow.com/a/9941032/237838). –

8

Hay dos formas de manipular e this -
a). Haga la propiedad como Nullable como

public int? Age { get; set; } 

b). Use lo siguiente en la clase de controlador:

ModelState["Age"].Errors.Clear(); 

c). Agregar a la puesta en marcha- DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Cuestiones relacionadas