控制器的操作与字典作为参数剥离到点

时间:2015-07-22 13:52:15

标签: c# .net asp.net-mvc

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

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

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

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

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

我字典中的键被剥离到点并且没有任何值。

enter image description here

尝试没有点工作。如何使用MVC Dictionary<string, string>中的点进行帖子?

2 个答案:

答案 0 :(得分:3)

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

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

所以我强烈建议用.之类的转义序列替换客户端_dot_(点),并在服务器端替换它。当然,表现会受到影响。

答案 1 :(得分:1)

将javascript更改为

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

然后使用

发布
$.post('@Url.Action("TestAction")', data, function(data) { ...`