发送JSON对象以在页面上查看和访问它

时间:2014-08-01 10:52:12

标签: asp.net-mvc json asp.net-mvc-4 jsonresult

在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(模型发送到视图)为空。以上是否可能,如果是这样的话?

2 个答案:

答案 0 :(得分:1)

不要在控制器中序列化,将模型传递给视图,然后序列化。 控制器:

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

答案 1 :(得分:1)

尝试向您的视图发送包含JSON数据模型代码的字符串,将其加载到隐藏元素上,然后将JSON.parse添加到您的javascript代码中。