2017-02-21 3 views
0

Я построил сайт MVC и я передаю в моей модели представления и пытаюсь использовать его в некотором JavaScript в представлении с помощью:Синтаксических в Json закодированного массив

var records = @Html.Raw(Json.Encode(Model)); 

Я прицеливание по использованию эти записи в пользовательском объекте календаря, который принимает массив объектов в качестве источника данных. Тем не менее, источник данных ожидает, что переменные даты должны знать, где назначать встречи и т. Д. Я читал, что Json не имеет формата даты своего. Таким образом, все даты, которые возвращаются из закодировать отформатированы как:

/Date(1462921200000)/ 

Объект, кажется, не принять это и ничего не отображается на представлении. В сообщениях, которые я прочитал, они заявили, что вы можете проанализировать дату в правильном формате, но это похоже только на отдельные значения.

Мой вопрос: есть ли простой способ взять закодированный объект, который у меня есть, и проанализировать даты в правильном формате? Или мне нужно будет пройти через них, чтобы сделать это?

Спасибо.

+0

Это не похоже на сырой JavaScript. Используете ли вы технологию препроцессора? –

+1

Возможный дубликат [Формат даты в формате ASP.NET MVC JsonResult] (http://stackoverflow.com/questions/726334/asp-net-mvc-jsonresult-date-format) –

ответ

0

Приложение Asp.Net MVC по умолчанию возвращает даты в формате ISO-8601. Вы можете преобразовать значение в стороне клиента с помощью функции, как это:

function ConvertDate(dateString) { 
    return new Date(parseInt(dateString.replace("/Date(", "").replace(")/", ""), 10)); 
    } 

Или вы можете использовать библиотеку как momentjs (https://momentjs.com/docs/#/parsing/asp-net-json-date/):

moment("/Date(1198908717056-0700)/"); // 2007-12-28T23:11:57.056-07:00 
0

Отказ от ответственности: вопрос не идентифицированного как ASP.NET, когда я составил этот ответ. Я предполагаю, что ОП просит некоторую функцию, предоставленную его еще не раскрытой структурой. Я сохраняю ответ, потому что я думаю, что он действителен для ручного декодирования в ванильном JavaScript.


Формат может быть проанализирован с помощью простого регулярного выражения

var asText = "Date(1462921200000)"; 
 
var asDate = null; 
 
var parsed = asText.match(/^Date\((\d+)\)$/); 
 
if (parsed!==null) { 
 
\t asDate = new Date(+parsed[1]); 
 
} 
 
console.log(asDate);

1

Предупреждение: Этот ответ самоуверенные. Утомленная часть: когда вам нужно что-то сделать с Json, используйте Json.Net.

namespace System.Web.MVC 
{ 
    public static class HtmlHelperJsonExtensions 
    { 
    public string JsonEncode(this System.Web.MVC.HtmlHelper html, object o) 
    { 
     var jsonSettings = new Newtonsoft.Json.JsonSerializerSettings() 
     { 
     // Here you can apply a LOT of formatting, as a small example regarding dates: 
     // 1 - formats dates as iso strings (probably what you want) 
     DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, 
     // 2 - formats dates with Microsoft format (what you're experiencing) 
     //DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat, 
     // 3 - formats date in a custom format as for DateTime.ToString(string) overload 
     //DateFormatString = "yyyy-MM-dd" 
     Formatting = Indented 
     }; 

     var json = Newtonsoft.Json.JsonConvert.SerializeObject(o, jsonSettings); 

     return html.Raw(json); 
    } 
    } 
} 

Использование:

var records = @Html.JsonEncode(Model); 

Обратитесь к превосходному Json.NET документации here для проникновения в суть.

Смежные вопросы