最近的项目需要一个添加计划表功能:用户添加一条条计划,保存到javascript数组,生成TABLE,最终传值给controller。这样子,在用户编辑或Postback的时候需要从controller传值给View。首先,想到的是使用ViewData保存IList,然后到View遍历赋值给javascript的array。但是在Javascript中使用一大串的,编译器不是提示缺“)”就是缺";"...(表笑我-_-|||)
嗯。到网上搜索下,找了一篇类似问题的帖子。
How to iterate through objects in ViewData via javascript. on the page/view?
在帖子的回复中提供了2种思路,一是直接View中foreach ViewData保存的List生成数组。对这种方法感兴趣的朋友可以自己看一下,我还是觉得对View不友好。另一种是使用保存JSON到ViewData,使对javascript来说莫名其妙的容器变为熟悉无比的JSON。这里主要讲第二种。
首先是我们需要将列表转为JSON。帖子也提到了ScottGu大牛的一篇文章:Tip/Trick: Building a ToJSON() Extension Method using .NET 3.5。在文章中定义了2个转换OBject为JSON的扩展方法。
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> public static string ToJSON( this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
public static string ToJSON( object obj, int recursionDepth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = recursionDepth;
return serializer.Serialize(obj);
}
使用起来也很简单: ViewData["Schedules"] = ScheduleList.ToJSON();
通过JavaScriptSerializer将对象转换为JSON,我们就能很容易的在Javascript中处理。比如用Jquery:
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/0be121fa5b8988fbabbbc526af3b0fc0.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> var data=new Array();
$(document).ready(function(){
var content=ViewData["Schedules"]==null?0:ViewData["Schedules"] %>;
if(content!=0)
{
$.each(content, function(i, item) {
data.push(new Array(item["ItemA"],item["ItemB"],item["ItemC"]));
});
}
});
作者:苍苔
出处:http://www.cnblogs.com/WindWing/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-618122/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12639172/viewspace-618122/