Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t从javascript访问ViewBag(具有JSON对象列表)_Javascript_C#_Json_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

Can';t从javascript访问ViewBag(具有JSON对象列表)

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

在我的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;
调试后,返回字符串形式的值[从控制台]

var contactData='System.Web.Mvc.JsonResult'

使用(它可能已经被引用,因为MVC将其用作默认序列化程序)


像这样使用Html.RawJson.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>预先编写