Я использую vis.js для создания временной шкалы и пытаюсь понять, где я ошибаюсь, пытаясь передать JSON из моей модели в представление. График принимает данные в формате JSON, например:Передача правильно отформатированного JSON из .NET MVC Controller для просмотра
var data = [
{"content": "item 1", "start": "2016-08-20"},
{"content": "item 2", "start": "2016-08-21"},
{"content": "item 3", "start": "2016-08-21"}];
У меня есть модель выглядит так:
public class MyModel
{
public ModelData Data { get; set; }
public IEnumerable<TimeLineEntry> Timeline { get; set; }
public string ChartData { get; set; }
}
В моем контроллере, я передаю эту модель на вид в качестве ActionResult:
public ActionResult Summary(FilterModel filter)
{
var modelData = GetModelData(filter);
var timeline = BuildTimeLine(modelData);
var chartData = BuildChartData(timeline);
MyModel model = new MyModel
{
ModelData = modelData,
Timeline = timeline,
ChartData = chartData
};
return View(model); //setting a breakpoint here, ChartData JSON looks
}
private string BuildChartData(List<TimelineEntry> data)
{
var timeline = data.Select(a => new
{
content = a.Description,
start = a.CreatedOn
});
var jsonSerializer = new JavaScriptSerializer();
return jsonSerializer.Serialize(timeline);
}
в представлении, я пытаюсь создать переменную для хранения JSON для использования в JavaScript Application, как следующее:
<script type="text/javascript">
// DOM element for the timeline
var container = document.getElementById('visualization');
var data = @Model.ChartData; //I have a feeling I can't define data like this due to the way it is compiled.
var chartData = JSON.parse(data);
var items = new vis.DataSet(chartData); //this takes JSON
var options = {};
var timeline = new vis.Timeline(container, items, options);
</script>
Когда страница компилируется, я получаю сообщение об ошибке: яваскрипта Uncaught SyntaxError: Неожиданный токен &
Это происходит, когда я пытаюсь сохранить @Model.ChartData
в качестве переменной; это выглядит так, когда составлено: [{"content":"","start":"\/Date(1471890279333)\/"},{ ..
..
Я чувствую, что это простая проблема, но я в настоящее время не понимаю, как правильно передать JSON из модели в представление.
'Var данные = @ Html.Raw (Json, Encode (Model.ChartData))' –
@StephenMuecke гениально, спасибо. Чтобы зафиксировать небольшую опечатку, это исправление работало: 'var data = @ Html.Raw (Json.Encode (Model.ChartData))' –
Толстые пальцы :). Вы также можете рассмотреть возможность форматирования даты на сервере, если вы хотите, чтобы он был в этом формате (например, «CreatedOn.ToString (« yyyy-MM-dd »)) –