在我的 ASPMVC 代码中,我使用以下代码填充了 ViewBag.Contacts 变量
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;
当我尝试通过此代码从 javascript 访问 ViewBag.Contacts 变量时
var contactData = '@ViewBag.Contacts';
调试后 [从控制台] 以字符串形式返回值
var contactData = 'System.Web.Mvc.JsonResult';
最佳答案
您不能使用 JsonResult 返回 Json 格式的字符串。 JsonResult 类继承自 ActionResult 类,因此返回值是一个包含 Json 格式的 'Data' 属性和其他响应属性的对象。所以并使用@符号输出结果,将返回类名作为字符串。 如果要将对象序列化为 Json 对象,请使用 Newtonsoft's Json.NET序列化程序或使用 JavaScriptSerializer 类中的 .NET 构建。
牛顿软件:
String serializedResult = JsonConvert.SerializeObject(jsonContactsGroups);
JavaScriptSerializer :
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer() ;
String serializedResult = serializer.Serialize(result);
然后将Json序列化后的字符串返回给 View :
ViewBag.Contacts = serializedResult;
但是如果您想将 Json 模型或结果返回给 View ,我建议您将操作方法编写为 JsonResult 方法。
关于javascript - 无法从 javascript 访问 ViewBag(有一个 JSON 对象列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30422480/