找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3098|回复: 0
收起左侧

.Net平台MVC架构中的ModelBinder绑定List<T>

[复制链接]
ID:262 发表于 2016-8-12 15:39 | 显示全部楼层 |阅读模式
序:
    .Net下的MVC可通过构造函数借助ModelBinder反序列化客户端传递的数据,懒人好帮手。但如果JS端传递的是一个复杂的数组,则服务器段接收到的List集合项则均为null。很少使用,所以对于Microsoft官方是否给提供简便的方案不得而知。完全凭关键字在网上查询。

0x01:
    CSDN传送门:http://blog.csdn.net/sq111433/article/details/9360111(请尊重他人版权)
    代码略微有些复杂,粗略的看到JSON的格式。所以按照预想拼接出一个特殊的“数组”进行尝试,没想到竟然通过。其mvcParamMatch函数基本逻辑流程如下:
    1、判断入参是否为数组?
        是:执行步骤2
        否:正常的命属性名,并遍历子属性,如子属性中有数组则跳入步骤2
    2、 递归遍历数组,直到入参不为数组则跳入步骤1的【否】分支。

0x02:
     即使服务器端接收的为一个List<T>类型的数据,JS段采用的数据结构并非new Array(),而依然还是Object,但key的名称有一定的规则。假设T的类型结构如下:
    public class Person{
        public string Name{get;set;}
        public int Age{get;set;}
    }

     如上T类型结构对应拼接出来的JS对象基本如下:
    var person = {};
    // 第一个
Person即List[0]
    person['PersonName[0].Name' ='Clown';
    person['PersonName[0].Age'] =1024;
    // 第二个 Person即List[1]
    person['
PersonName[1].Name' ='Clown2';
    person['Person
Name[1].Age'] =2048;
    注:上文中的PersonName则为服务器Action构造函数的形参名称。

0x03:
    传送门指向的博客中JS方法为一个通用的转换函数,如果不想了解数据是怎么来的则可以直接使用。Default ModelBinder反序列化规则了解后根据自己的需求实现同类方法会更好一些。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表