javascript - 无法从 javascript 访问 ViewBag(有一个 JSON 对象列表)

标签 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 = 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/

相关文章:

javascript - 在 Chrome 中上传文件时点击 'Cancel' 清除值

c# - 在 ASP.NET 中获取服务器的 IP 地址?

c# - “抽象类”与可重用库的 'normal class'

json - 如何将Kafka主题中的嵌套Json消息解析为配置单元

java - 使用 jackson 时跳过 JSON 中的第一级

javascript - 表单验证应该如何工作?

Javascript删除稀疏数组上的项目并调整长度错误

javascript - 如何仅通过某些对象填充 Ember.js 的 Select?

c# - Linq - 高级 .OrderBy

json - 使用 Jackson 进行序列化时如何仅包含特定属性