zoukankan      html  css  js  c++  java
  • MVC接收列表参数

    ASP.NET  MVC 表单参数如果有列表时要怎么写呢.

    虽然很久不用MVC了,但几乎每次遇到一次就要研究一下.然后又忘了.

    其实也明白这是未完全弄清楚表单参数的传递形式,如果明白了,就知道MVC为什么要这样接收了..MVC这种方式肯定不是随便想出来的,而是遵守参数传递的形式而定的

    // action 参数 u 这个参数有一个属性,值是一个列表,

    pulic actionreault  method(user u)

    {

    }

    class user{

      public string name      {get;set;}

      public string[] friends  {get;set;} // 列表属性

    }

    // 脚本 如何传这个参数

    var para={};

    para.name='博客员';

    para.friends[0]='MS'

    para.friends[1]='asp.net'

    // 注意这个写法, friends属性对应实体上的friends属性,当然了.这是必须的,

    由于friends是个数组,所以脚本参数写成 friends[0]=xx friends[1]=xx 这个意思就是数组的第0个值,第1个值 ....

    那怎么为什么直接写成para.friends=['MS','asp.net']时,action会接收不到呢?

    这就是http参数基础格式,  key=value 假如一个GET请求 , friends=MS&friends=asp.net&K=V... 这个键重复了, 服务端接收时可能会将相同的键弄成一个数组

                                                               假如是个POST请求,传一个JSON对象,那键不能重复.ASP.MVC采取了键名[下标]的形式,当做 一个数组.可以解析到实体的对应名称的数组对象上

    // 具体写法

    http传参数的格式对于服务端来讲,都是那样的K=V.但是不同的服务端解析的方式可能不相同.

    例如ASP.NET MVC服务端接收一个数组参数,属性名字叫 users  那么请求时传入的json参数写法是

    json['users[0]'] = 'user1';

    json['users[1]'] = 'user2';

    ....

    json.['users[n]']='usern';

    users[0]这个键名分为 users [0] 两部分, users表示服务端接收时使用的属性名, [0]表示users的下标为0的值

    不能写成 json.users=['user1','user2'] ,这样接收不到.

    // 对象数组参数写法

    class user{ Name ; Sex}

    如果数组不是简单的string[]或者int[],而是一个对象数组 user[] ,假如参数名还是叫 users,那么写法如下

    json['users[0].Name'] = 'name'

    json['users[0].Sex'] = '男'

     'users[0].Name' 这个键名分为 users [0] Name ,表示 users这个属性的第0个元素的Name属性的值

    // 其它解决办法

    如果不希望理解这种搞法,认为写起来复杂,不符合JSON键值对的特点,那不必这样传参数

    可以将参数按原始JSON组装好,然后再使用JSON3.js,这个库弄成JSON字符串作为一个参数传递.服务端收到之后,使用newtonjson解析就行了

    var para={para:JSON.stringify(json)}
    $.post(para);
    *********************
    var json=request.form.get("para");
    Newtonsoft.Json.JsonConvert.DeserializeObject<Users>(json);
  • 相关阅读:
    分布式系统之CAP原理
    分布式缓存一致性哈希算法
    数据库三范式 无重复列 完全依赖主键 属性不依赖非主属性
    二叉树 B-树B+树
    数据库索引 主键 聚集索引 非聚集索引
    数据库水平拆分
    线程池ScheduledThreadPoolExecutor
    线程池之ThreadPoolExecutor
    mybatis一级缓存和二级缓存
    vue框架的搭建
  • 原文地址:https://www.cnblogs.com/mirrortom/p/8971118.html
Copyright © 2011-2022 走看看