无法通过javascript

时间:2015-05-24 10:29:03

标签: 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 =&#39; System.Web.Mvc.JsonResult&#39;;

3 个答案:

答案 0 :(得分:4)

您无法使用JsonResult返回Json格式化字符串。 JsonResult类继承自ActionResult类,因此返回的值是一个包含Json格式化的“Data”属性和一些其他响应属性的对象。所以并使用@符号输出结果,将类的名称作为字符串返回。 如果要将对象序列化为Json对象,请使用Newtonsoft's Json.NET序列化程序或在JavaScriptSerializer类中使用.NET构建。

Newtonsoft:

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer() ;
String serializedResult = serializer.Serialize(result);

JavaScriptSerializer:

ViewBag.Contacts =  serializedResult;

然后将Json序列化字符串返回到视图:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`database`.`messages`, CONSTRAINT `messages_sender_id_foreign` FOREIGN KEY (`sender_id`) REFERENCES `users` (`id`) ON UPDATE CASCADE) (SQL: insert into `messages` (`subject`, `message`, `draft`, `updated_at`, `created_at`) values (test, testgdsgds, 0, 2015-05-24 16:03:59, 2015-05-24 16:03:59))

但是 如果你想将Json模型或结果返回给视图,我建议你把你的动作方法写成JsonResult方法。

答案 1 :(得分:2)

使用 Html.Raw Json.Encode 之类的

var model = @Html.Raw(Json.Encode(ViewBag.Contacts));

// fetch data

$.each(model.Data, function() {
    console.log($(this).attr("GroupName"));
});

答案 2 :(得分:0)

使用JSON.Net(由于MVC将其用作默认序列化程序,因此可能已引用它)

using Newtonsoft.Json;

ViewBag.Contacts = JsonConvert.SerializeObject(jsonContactsGroups, Formatting.Indented);