2012-09-26 16 views
5

¿cómo puedo evitar la generación del atributo html "data-val-date" para el elemento creado a partir de una propiedad Datetime?ASP.NET MVC 4 evitar la generación de data-val-date para datetime

El modelo:

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "Date of birth")] 
    public DateTime? DateOfBirth { get; set; } 
} 

La vista:

@Html.LabelFor(m => m.DateOfBirth) 
@Html.EditorFor(m => m.DateOfBirth) 

De hecho, estoy creando un elemento de tres listas desplegables para seleccionar la fecha de nacimiento, que no dan una valor en un formato de fecha. Algunas soluciones que he visto, consistieron en una solución: eliminar la validación con un javascript. La solución que preveo es dividir la propiedad DateTime en tres largas para cada valor (día, mes, año).

Respuesta

0

data-val-date es utilizado por el sistema de validación para validar la fecha. Si lo elimina, la validación del lado del cliente no funcionará.

Si eso es lo que quiere, simplemente deshabilite la validación del lado del cliente.

+0

Bien, gracias por su respuesta rápida. ¿Deshabilitar la validación del lado del cliente tendrá efecto en cada elemento? Por mi parte, opto por un nuevo objeto que contenga mis tres valores y reemplazando la fecha y hora. – bado

+0

@bado - lo siento, no entiendo lo que quieres decir. –

+0

Tengo que precisar, solo comienzo en web technos. Quise decir que si deshabilito la validación del lado del cliente, todo el val de datos (de todos los elementos en el formulario) no tendrá ningún efecto? – bado

12

Ok, esto me tomó una tarde de trabajo ... aparentemente mvc4 decidió que era hora de presentar un data-val-date = "Mensaje" en CADA propiedad de fecha y hora en el modelo de vista. Intenté modificar este comportamiento predeterminado pero no tuve éxito.

Esto solucionó mis problemas:

$.validator.addMethod('date', 
    function (value, element) { 
     return true; // since MVC4 data-val-date is put on EVERY vm date property. Default implementation does not allow for multiple cultures... 
    }); 

También puede tratar de escribir su propia plantilla editor llamado "DateTime.cshtml" en la carpeta compartida EditorFor, pero no use TextBoxFor allí, porque eso es una contaminado también.

+0

Prefiero esta solución porque solo desactiva la causa del problema. La validación del lado del cliente proporciona una mejor experiencia del usuario y reduce los back-backs a su servidor, por lo que debe evitarse la desactivación de todo. –

+0

sigue siendo útil + 1ed – user2695433

0

Agregue esto al inicio de su aplicación en su archivo global.asax y el formulario debe activarse.

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 
Cuestiones relacionadas