Can';t从javascript访问ViewBag(具有JSON对象列表)
在我的ASPMVC代码中,我使用下面的代码填充了ViewBag.Contacts变量Can';t从javascript访问ViewBag(具有JSON对象列表),javascript,c#,json,asp.net-mvc,asp.net-mvc-4,Javascript,C#,Json,Asp.net Mvc,Asp.net Mvc 4,在我的ASPMVC代码中,我使用下面的代码填充了ViewBag.Contacts变量 var contactsGroups = EntityContext.DBContext.TS_GetConfirmedContacts(typeId,AccountId).GroupBy(c=>c.GroupName); // JSONGroup Custom object List<JSONGroup> jsonContactsGroups
var contactsGroups = EntityContext.DBContext.TS_GetConfirmedContacts(typeId,AccountId).GroupBy(c=>c.GroupName);
// JSONGroup Custom object
List<JSONGroup> jsonContactsGroups = new List<JSONGroup>();
foreach (var group in contactsGroups)
{
jsonContactsGroups.Add(new JSONGroup
{
GroupName = group.Key,
Objects = new List<object>(group.ToList())
});
}
var result = new JsonResult
{
Data = jsonContactsGroups,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
ViewBag.Contacts = result;
调试后,返回字符串形式的值[从控制台]
var contactData='System.Web.Mvc.JsonResult'
使用(它可能已经被引用,因为MVC将其用作默认序列化程序)
像这样使用Html.Raw和Json.Encode
var model = @Html.Raw(Json.Encode(ViewBag.Contacts));
// fetch data
$.each(model.Data, function() {
console.log($(this).attr("GroupName"));
});
不能使用JsonResult返回Json格式的字符串。JsonResult类继承自ActionResult类,因此返回的值是一个包含Json格式化的“Data”属性和一些其他响应属性的对象。因此,使用@symbol输出结果时,将以字符串形式返回类的名称。 如果要将对象序列化为Json对象,请使用serializer或使用.NET内置JavaScriptSerializer类 Newtonsoft:
String serializedResult = JsonConvert.SerializeObject(jsonContactsGroups);
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer() ;
String serializedResult = serializer.Serialize(result);
JavaScriptSerializer:
String serializedResult = JsonConvert.SerializeObject(jsonContactsGroups);
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer() ;
String serializedResult = serializer.Serialize(result);
然后将Json序列化字符串返回到视图:
ViewBag.Contacts = serializedResult;
但是如果您想将Json模型或结果返回到视图中,我建议您将您的操作方法编写为JsonResult方法。使用NewtonSoft对我来说很有效,尽管我必须使用
NewtonSoft.Json
作为NewtonSoft.Json.JsonConvert.SerializedObject()
中的NewtonSoft.JsonConvert.SerializedObject>预先编写。