2012-06-25 19 views
6

Próbuję przekazać poniżej danych z mojego formularza do kontrolera.Jak przekazać datetime z widoku do kontrolera w asp.net MVC

Zmieniano

<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; } 

} 

Ale w kontrolerze otrzymuję null dla nazwy i identyfikatora, datetime domyślną dla DOB, stwierdziliśmy, że nie ma problemu w przejściu datetime. Czy istnieje lepszy sposób przekazywania datetime z widoku do kontrolera? czy brakuje mi jakiejkolwiek analizy składniowej?

+0

Co robi swoje działanie na kontrolerze wyglądać? – thmsn

+0

[ObjectFilter (Param = "studentData", RootType = typeof (Stu []))] publiczny JsonResult UpadetStudent (Stu [] studentData) { return this.Json (new {success = true}); } Używam powyższego kodu w kontrolerze. – Amar

+0

Jak wygląda twój obiekt Stu? czy ma właściwość DOB? Czy zweryfikowaliście, co wasz jQuery.ajax publikuje na waszym serwerze za pomocą firebuga lub skrzypka? – thmsn

Odpowiedz

5

Problemem jest Thu Dec 9 13:30:00 UTC+0530 2010 nie może być analizowany pod ważnego obiektu datetime języku C#. Możesz spróbować, dzwoniąc pod numer DateTime.Parse("Thu Dec 9 13:30:00 UTC+0530 2010"), ale to się nie powiedzie.

Sugeruję, że zamiast zwracać ten format daty z serwera, można lepiej zwracać format ISO 8601, który wygląda jak 2010-12-09T08:00:00.000Z.

można łatwo przekształcić długi format datetime w ISO 8601 z javascript przez,

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

Jeśli używasz JSON.NET biblioteki można łatwo kontrolować sposób, w jaki datetimes muszą być w odcinkach.

UPDATE:

<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 (Student); sam zmieni format, "studentString" będzie miał format DOB w tym formacie 2010-12-09T08: 00: 00.000Z tylko wtedy, dlaczego nie działa? – Amar

+0

właśnie testowane z prostym tekstowym wchodzącego do datetime w formacie ISO i to działało dobrze – VJAI

+0

proszę pisać więcej kodu czym mogę pomóc, aby dowiedzieć się, gdzie problem jest – VJAI

0

Jeśli obiekt studentData w kontrolerze ma wartość NULL, JSON.stringify (Student) tworzy obiekt, który nie jest prawidłowym JSON lub obiektem, którego nie można sparsować do obiektu Stu.

sprawdzić, czy obiekt JS Student jest poprawna, a następnie zweryfikować JSON produkować robi JSON.stringify

Powiązane problemy