2012-06-25 35 views
6

Estoy tratando de pasar datos desde mi vista al controlador.Cómo pasar el datetime de la vista al controlador en asp.net MVC

Editado

<script type="text/javascript"> 
    var pathname = 'http://' + window.location.host; 
    var Student = [ 
    { Name: "Vijay", ID: 1, DOB: "2010-12-09T08:00:00.000Z" }, 
    { Name: "Anand", ID: 2, DOB: "2010-12-09T08:00:00.000Z" } 
    ]; 

    $.ajax({ 
    url: pathname + "/Home/UpadetStu", 
    type: "POST", 
    dataType: "json", 
    data: JSON.stringify(Student), 
    contentType: "application/json; charset=utf-8", 
    success: function (result) { }, 
    failure: function (r, e, s) { alert(e); } 
    }); 

</script> 



    [ObjectFilter(Param = "stuData", RootType = typeof(Stu[]))] 
    public JsonResult UpadetStu(Stu[] stuData) 
    { 
     return this.Json(new { success = true }); 
    } 

[DataContract] 
public class Stu 
{ 
    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public int ID { get; set; } 

    [DataMember] 
    public DateTime? DOB { get; set; } 

} 

Pero en el controlador estoy recibiendo nulo para Nombre y DNI, fecha y hora predeterminada para DOB, he encontrado que hay un problema en la aprobación de fecha y hora. ¿Hay alguna forma mejor de pasar el horario de la vista al controlador? ¿Extraño algún análisis?

+0

¿Qué hace su acción en su mirada como controlador? – thmsn

+0

[ObjectFilter (Param = "studentData", RootType = typeof (Stu []))] public JsonResult UpadetStudent (Stu [] studentData) { return this.Json (new {success = true}); } Estoy usando el código anterior en el controlador. – Amar

+0

¿Cómo es tu objeto Stu entonces? ¿Tiene una Propiedad DOB? ¿Has verificado qué jQuery.ajax está publicando en tu servidor, usando Firebug o Fiddler? – thmsn

Respuesta

5

El problema es Thu Dec 9 13:30:00 UTC+0530 2010 no se puede analizar en un objeto de fecha y hora válida en C#. Puede intentarlo simplemente llamando al DateTime.Parse("Thu Dec 9 13:30:00 UTC+0530 2010"), fallará.

Sugeriría que en lugar de devolver ese formato de fecha desde el servidor, puede devolver el formato ISO 8601 que se parece al 2010-12-09T08:00:00.000Z.

Usted puede convertir fácilmente el formato de fecha y hora larga en la norma ISO 8601 de Javascript por,

new Date("Thu Dec 9 13:30:00 UTC+0530 2010").toJSON(); 

Si está utilizando JSON.NET biblioteca se puede controlar fácilmente la forma en que los datetimes tienen que ser serializado.

ACTUALIZACIÓN:

<script type="text/javascript"> 

    var Student = [ 
    { Name: "Vijay", ID: 1, DOB: "2010-12-09T08:00:00.000Z" }, 
    { Name: "Anand", ID: 2, DOB: "2010-12-09T08:00:00.000Z" } 
    ]; 

    $.ajax({ 
    url: "/Home/Index", 
    type: "POST", 
    dataType: "json", 
    data: JSON.stringify(Student), 
    contentType: "application/json; charset=utf-8", 
    success: function (result) { }, 
    failure: function (r, e, s) { alert(e); } 
    }); 

</script> 

[HttpPost] 
public ActionResult Index(Student[] students) 
{ 
    ... 
} 
+0

var studentString = JSON.stringify (Estudiante); cambiará el formato, "studentString" tendrá DOB en este formato 2010-12-09T08: 00: 00.000Z solo entonces porque no funciona? – Amar

+0

Acabo de probar con un simple cuadro de texto que ingresa la fecha y hora en formato ISO y funcionó bien – VJAI

+0

Publique más código, entonces puedo ayudar a averiguar dónde está el problema – VJAI

0

Si su objeto studentData en su controlador es nulo, JSON.stringify (Estudiante) está produciendo un objeto que no es JSON adecuado o un objeto que no se puede analizar en su objeto Stu.

verificar que su objeto JS estudiante es correcta, a continuación, compruebe el JSON que producen haciendo JSON.stringify

Cuestiones relacionadas