Отправить объект JSON для просмотра и доступа к нему на странице

В приложении MVC4 мой контроллер делает следующее:

public ActionResult MyPage()
{
    var myObjects = _db.Object.ToList(); // _db is database context, object consists 
                                         // of Id and Name

    return View("MyView", 
            Json(new 
           System.Web.Script.Serialization.JavaScriptSerializer().Serialize(myObjects )));
}

Теперь я хочу получить доступ к этим данным и поместить их в тело таблицы без повторного обращения к серверу, например, следующим образом:

$(function () {

    var result = JSON.parse(myObjects);

    for (var i = 0; i < result.length; i++) {
        renderMyObject(result[i]);
    }

    function renderMyObject(o) {

        var row = document.createElement("tr");

        var tdId= document.createElement("td");
        tdId.innerHTML = o.Id;

        var tdName = document.createElement("td");
        tdName.innerHTML = o.Name;

        row.appendChild(tdId);
        row.appendChild(tdName );

        tbody.appendChild(row);
    };
});

Это не работает, так как result (модель, отправленная в представление) имеет значение null. Возможно ли вышеизложенное и если да, то как?


person Erwin Rooijakkers    schedule 01.08.2014    source источник
comment
возможный дубликат Как вернуть объект Json из контроллера MVC в просмотреть   -  person Erwin Rooijakkers    schedule 03.08.2014


Ответы (2)


Попробуйте отправить в представление строку с кодом модели данных JSON, загрузить ее в скрытый элемент и просто JSON.parse ее в коде javascript.

person Bardo    schedule 01.08.2014

Не сериализуйте в контроллере, передайте модели в представление, а затем сериализуйте. Контроллер:

public ActionResult MyPage()
{
    var myObjects = _db.Object.ToList(); // _db is database context, object consists 
                                         // of Id and Name

    return View("MyView", myObjects);
}

Вид:

@model IEnumerable<MyProject.Models.Object>

Затем используйте его в JavaScript для сериализации и т. д.:

$(function(){
    var myObjects = JSON.parse(@Model);
});

Если вы хотите использовать его в отдельном файле JavaScript, вам просто нужно указать правильное пространство имен, то есть:

var myVariable;

$(function(){
    myVariable = JSON.parse(@Model);
    initializeStuff(myVariable);
});

внешний JS:

var variable;

initializeStuff(stuff)
{
    variable = stuff;
}
person devqon    schedule 01.08.2014
comment
Огромное спасибо. Что, если я хочу разместить JavaScript в отдельном файле? И 2, это не работает, так как страница отображается в: $(function () { var myObjects= JSON.parse(System.Collections.Generic.List 1[MyProject.Models.Object]); - person Erwin Rooijakkers; 01.08.2014