控制器将字典作为参数剥离的动作

我有一个Action在其属性中接收一个包含字典的类:

public ActionResult TestAction(TestClass testClass)
{
    return View();
}

public class TestClass
{
    public Dictionary<string, string> KeyValues { get; set; }
}

如果我使用以下JSON对我的操作发布帖子:

{
  "KeyValues": {
    "test.withDoT": "testWithDot"
  }
}

我的字典中的关键字被剥离并没有任何价值。

尝试没有点的作品。 我如何使用MVC在Dictionary<string, string>使用点进行发布?


我们盲目地尝试假设在深处有一个正则表达式解析器(它的机会很小),并且逃脱'点'。

经过一段时间后,我得出结论:dot不是标识符中的合法字符。 是的,我知道它是C#字典中的一个关键字,但在json部分(和JavaScript)中,它可能在标识符语法角色中。

所以我强烈建议替换客户端的. (点)与_dot_一样的转义序列,并将其替换回服务器端。 性能当然会受到影响。


将javascript更改为

var data = { 'KeyValues[0].Key': 'test.withDoT', 'KeyValues[0].Value': 'testWithDot' };

然后张贴使用

$.post('@Url.Action("TestAction")', data, function(data) { ...`
链接地址: http://www.djcxy.com/p/86883.html

上一篇: Controller's action with dictionary as parameter stripping to dot

下一篇: setConnectTimeout vs. setConnectionTimeToLive vs. setSocketTimeout()