2011-12-15 10 views
6

Tengo un formulario que contiene una fecha y de fecha y hora campo:del lado del cliente de tipo fecha de entrada no funciona

@Html.TextBoxFor(model => model.A, new { @type = "datetime" }) 
@Html.TextBoxFor(model => model.B, new { @type = "date" }) 

Modelo:

public class TestModel 
{ 
    [DataType(DataType.Date)] 
    public DateTime A {get;set;} 

    [DataType(DataType.Date)] 
    public DateTime B {get;set;} 
} 

Mediante el uso de estos tipos de entrada de un iPad muestra agradable selectores de fecha (hora). Los campos se validan utilizando la validación del lado del cliente. Para el campo de fecha y hora (A) funciona, pero el campo de fecha (B) generará un error: "ingrese una fecha válida". ¿Cómo puedo solucionar esto?

Ejemplos:

  • Este (Safari) valor iPad para datetime es válida (de acuerdo con MVC validación del lado del cliente): 15 Dec. 2011 9:20
  • Este valor de iPad (Safari) para la fecha no es válido: 15 de diciembre. 2011

Es difícil depurar el código en un iPad, así que no tengo idea de cómo Safari cambia el formato de fecha cuando se establece el atributo de valor de la entrada.

Edit: Descubrí que el formato de fecha y hora es el formato universal de fecha y hora (yyyy-MM-DDTHH:mmZ), mientras que el formato de fecha es yyyy-MM-dd. Probablemente, el validador del lado del cliente comprende el datetime universal y no el yyyy-MM-dd debido a la localización.

+0

favor dar un ejemplo de entrada para 'B' que plantea el error "por favor introduzca una fecha válida", pero que se considera válido. – phoog

+0

@ Comentario eliminado de Guillaume: es un código HTML válido, pero en realidad no lo manejan todos los navegadores. Como el iPad admite estos tipos de entrada, solo lo uso en una vista de iPad. Para navegadores normales utilizo un jQuery datetime picker. – Marthijn

+0

type = "date" es nuevo en HTML5. ¿Cuál es tu doctype? http://dev.w3.org/html5/markup/input.html – Guillaume

Respuesta

4

Tuve exactamente el mismo problema y me enloquecí más de lo que creía al ver un sitio móvil que estoy desarrollando en mi iPhone. La discusión en el tema a continuación lo resolvió para mí.

https://github.com/jzaefferer/jquery-validation/issues/20.

Además, para llegar hasta el final con esto de una manera transparente, he creado la siguiente plantilla de afeitar editor para tipos de datos Fecha:

@model DateTime? 
@Html.TextBox("myDate", ViewData.Model.ToIso8601FullDate(), new { type = "date", @class = "text-box single-line" }) 

y un método útil extensión para alimentar el HTML 5 fecha de tipo de entrada de una formato que le gusta trabajar con de acuerdo con el spec for input type=date:

public static string ToIso8601FullDate(this DateTime? d) 
{ 
    if (!d.HasValue) return null; 

    return d.Value.ToString("yyyy-MM-dd"); 
} 
Cuestiones relacionadas