使用json传递关联数组:在控制器中期望哪种类型?

Ane*_*ook 5 c# asp.net-mvc json

在客户端,我有一个关联数组,我存储"Guid" - "int"对.我使用json将数组传递给服务器:

  $.ajax({
      url: methodUrl,
      type: 'POST',
      async: false,
      data: { values: items },
      dataType: 'json',
      success: function (data) {
          //...
      }
  });
Run Code Online (Sandbox Code Playgroud)

我尝试传递的对象看起来像这样(取自Chrome调试器):

  items: Object
  44f871e0-daee-4e1b-94c3-76d633a87634: 1
  698ce237-3e05-4f80-bb0d-de948c39cd96: 1
Run Code Online (Sandbox Code Playgroud)

在控制器中我有一个方法

  public ActionResult Method(Dictionary<Guid, int> values)
  {

  } 
Run Code Online (Sandbox Code Playgroud)

但是,属性值保持为null.只有客户端的Guids列表和控制器中的List一切正常.我怀疑我应该为控制器中的值选择另一种类型,而不是字典.我也尝试在ajax请求中添加"traditional:true",但没有成功.

任何建议表示赞赏!

Chr*_*xon 4

这就是我在使用 POST 命令时所做的事情:

var data = {
   values: items
}

var obj = $.toJSON(data);

$.ajax({
      url: methodUrl,
      type: 'POST',
      async: false,
      data: obj,
      dataType: 'json',
      success: function (data) {
          //...
      }
  });
Run Code Online (Sandbox Code Playgroud)

这应该正确发送到您的控制器,并且您不必使用字典对象,您应该将对象从客户端匹配到服务器端。我将使用一个自定义对象,其中包含 aGuid和 aint作为属性,并使用它 - .NET 将两者匹配。话虽这么说,使用字典是完全合理的,但这是个人喜好。

IE

public CustomObject 
{
    public Guid MyGuid { get; set; }
    public int MyNumber { get; set; }
}

public ActionResult Method(List<CustomObject> values)
{

} 
Run Code Online (Sandbox Code Playgroud)

具有多个参数:

items.SecondNumber = yourVariable; 
// In reality, you'd have a loop around your items and set this SecondNumber.

var data = {
    values: items
}

var obj = $.toJSON(data);


public CustomObject 
{
     public Guid MyGuid { get; set; }
     public int MyNumber { get; set; }
     public int SecondNumber { get; set; } // This is why we use CustomObject
}
Run Code Online (Sandbox Code Playgroud)