在我的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;;
答案 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);