[MVC]通过ViewData传递列表给JavaScript数组

  最近的项目需要一个添加计划表功能:用户添加一条条计划,保存到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的扩展方法。 

 

         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 ExpandedBlockStart.gif GetJsonList
        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"]));           
            });         
        }
        });     

 

转载于:https://www.cnblogs.com/WindWing/archive/2009/11/04/1595740.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值