2015-07-13 4 views
1

Я пытаюсь получить время с даты запроса AjaxType json. результат я получаю:Deserialization JSON time MVC

/DATE(1436688000000)/ 

Heres мой код:

вид:

<div class="col-sm-8"> 

     @Html.DropDownListFor(model => model[i].MovieShowTime.Single().MovieID, SelectMovieID, "Select Movie", new { id = "MovieName", name = "MovieName" }) 
     @Html.DropDownListFor(x => x[i].MovieShowTimeID, Enumerable.Empty<SelectListItem>(), "--Loading Value--", new { id = "ShowTime", name = "ShowTime" }) 
     @Html.ValidationMessageFor(model=>model[i].MovieShowTimeID) 
    </div> 

контроллер:

 public JsonResult GetShowTime(int? MovieID) 
    { 

     var data = (from m in db.MovieShowTimes 
        where m.MovieID == MovieID 
        select new 
        { 
         id = m.MovieShowTimeID, 
         name = m.ShowTime 
        }).ToList(); 

     return Json(data, JsonRequestBehavior.AllowGet); 
    } 

Аякса:.

  $(function() { 
      $('#MovieName').change(function() { 
      $.ajax({ 
      type: "POST", 
      url: '@Url.Action("GetShowTime", "TimeScreening")', 
      data: { MovieID: $('#MovieName').val() }, 
      dataType : 'json', 
      success: function (data) { 
       $('#ShowTime').html(''); 

       //alert(ChangeDateFormat("\/Date(1319266795390+0800)\/")); 
       $.each(data, function (id, option) { 
        var name = ChangeDateFormat(option.name) 
        $('#ShowTime').append($('<option></option>').val(option.id).html(option.name)); 
       }); 

      }, 
      error: function (xhr, ajaxOptions, thrownEror) { 
       alert("False" + xhr +"..."+ ajaxOptions +"... "+ thrownEror); 
      } 
     }); 
    }); 
}); 

Я вижу threds о преобразовании формы json в C# datetime, но ни один из них не разрешил проблему. следует за этим сообщением: JSON-Serialization-and-Deserialization-in-ASP-NET это jave me the closet answer, но это на свидании.

код:

function ChangeDateFormat(jsondate) { 
jsondate = jsondate.replace("/Date(", "").replace(")/", ""); 
if (jsondate.indexOf("+") > 0) { 
    jsondate = jsondate.substring(0, jsondate.indexOf("+")); 
} 
else if (jsondate.indexOf("-") > 0) { 
    jsondate = jsondate.substring(0, jsondate.indexOf("-")); 
} 

var date = new Date(parseInt(jsondate, 10)); 
var month = date.getMonth() + 1 < 10 ? 
    "0" + (date.getMonth() + 1) : date.getMonth() + 1; 
var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); 
return date.getFullYear() + "-" + month + "-" + currentDate; 
} 

этого ответ: Format a Microsoft JSON date действительно не уродливый разбор, но это не дало мне DateTime.Now и не близко ко времени.

этот ответ: ASP.NET MVC JsonResult Date Format такой же.

и это artical хорошо, но то же самое .. dates-and-json

так .. то, что мне нужно сделать?

+0

'/ DATE (1436688000000) /' не является допустимой строкой json. он даже не близок к действию json ... –

+0

что он печатает ...: S весь код здесь. @Leandro Soares answerd. спасибо –

ответ

1

У меня есть этот набор функций

// START Datetime Converters 
function DateConverter(date) { 
    var aux = null; 
    if (date != null) { 
     aux = date.substring(6); 
     aux = aux.substring(0, aux.indexOf(')')); 
    } 

    return aux != null ? getISODate(new Date(parseInt(aux))) : ""; 
} 

function DatetimeConverter(date) { 
    var aux = null; 
    if (date != null) { 
     aux = date.substring(6); 
     aux = aux.substring(0, aux.indexOf(')')); 
    } 

    return aux != null ? getISODateTime(new Date(parseInt(aux))) : ""; 
} 

function getISODate(d) { 
    // padding function 
    var s = function (a, b) { return (1e15 + a + "").slice(-b) }; 

    // default date parameter 
    if (typeof d === 'undefined') { 
     d = new Date(); 
    }; 

    // return ISO datetime 
    return zeroPad(d.getDate(), 2) + '/' + 
    zeroPad(s(d.getMonth() + 1, 2), 2) + '/' + 
    zeroPad(d.getFullYear(), 4); 
} 

function getISODateTime(d) { 
    // padding function 
    var s = function (a, b) { return (1e15 + a + "").slice(-b) }; 

    // default date parameter 
    if (typeof d === 'undefined') { 
     d = new Date(); 
    }; 

    // return ISO datetime 
    return zeroPad(d.getDate(), 2) + '/' + 
    zeroPad(s(d.getMonth() + 1, 2), 2) + '/' + 
    zeroPad(d.getFullYear(), 4) + " " + 
    zeroPad(d.getHours(), 2) + ":" + 
    zeroPad(d.getMinutes(), 2) + ":" + 
    zeroPad(d.getSeconds(), 2); 
} 

function zeroPad(num, places) { 
    var zero = places - num.toString().length + 1; 
    return Array(+(zero > 0 && zero)).join("0") + num; 
} 
// END Datetime Converters 

Пример: В таблице, где я показывать CreatedDate:

{ 
    "mRender": function (oAux, oType, oData) { 
     return DateConverter(oData.CreatedDate); 
    }, 
}, 

Если вы хотите даты и времени просто использовать DatetimeConverter

Что я делаю

Внутри функции DateConverter и DateTimeConverter я улавлю номер без \ DATE ... как "1436688000000".

Тогда внутри getISODate, в первой строке:

var s = function (a, b) { return (1e15 + a + "").slice(-b) }; 

Есть функция заполнения.Если день 2 будет «02», если вы используете это нравится:

s(d.getDate(), 2) 

Если дата, которая возвращает действие является недействительной или недействительной:

if (typeof d === 'undefined') { 
    d = new Date(); 
}; 

Другой функцией обивки является zeroPad, что делает что функция s() делает, но не удаляет оставшиеся цифры, например:

var a = 3000; 
var sA = s(3000, 2); 
var zpA = zeroPad(3000, 2); 

sA станет "00", а zpA будет держать "3000"

PS: Я не помню, почему я использовал s function ... Я думаю, что я забыл удалить его после создания zeroPad.

+0

Работайте отлично! Не могли бы вы объяснить, что вы здесь делаете? –

+1

Да, я отредактирую inline –

+0

Пояснение добавлено –