Javascript Regex将$.param返回的url字符串强制转换为MVC模型绑定约定

Javascript Regex to coerce url string returned from $.param into MVC model binding convention

本文关键字:转换 MVC 模型 约定 绑定 字符串 Regex param 返回 url Javascript      更新时间:2023-09-26

以下jQuery代码:

 $.param({                                        
                  Parts: [{ hasLabel: "label", hasType: "type", hasIndex : 1 }],
                  LastKey : "LastKey",
                  Term : "Term"                             
         })

给出以下输出:

 "Parts%5B0%5D%5BhasLabel%5D=label&Parts%5B0%5D%5BhasType%5D=type&Parts%5B0%5D%5BhasIndex%5D=1&LastKey=LastKey&Term=Term"

其解码为(使用decodeURI()):

 "Parts[0][hasLabel]=label&Parts[0][hasType]=type&Parts[0][hasIndex]=0&LastKey=LastKey&Term=Term"

然而,MVC中的默认模型绑定器期望以下内容:

 "Parts[0].hasLabel=label&Parts[0].hasType=type&Parts[0].hasIndex=0&LastKey=LastKey&Term=Term"

我正在寻找一个Javascript Regex来将编码的字符串强制转换为(仍然编码的)字符串,但它可以解码为正确的模型绑定约定。

以下应该可以做到:

var params = "Parts[0][hasLabel]=label&Parts[0][hasType]=type&Parts[0][hasIndex]=0&LastKey=LastKey&Term=Term";
var mvcParams = params.replace(/'[([^0-9]+)']/g,'.$1');

编辑:

要处理编码字符串,请执行以下操作:

var params = "Parts%5B0%5D%5BhasLabel%5D=label&Parts%5B0%5D%5BhasType%5D=type&Parts%5B0%5D%5BhasIndex%5D=1&LastKey=LastKey&Term=Term";
var mvcParams = params.replace(/%5b([^0-9]+)%5d/gi,'.$1');