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