[英]json object containing array maps to asp.net dictionary
我知道问题标题不是很清楚具体,但我真的不知道如何用几句话来形容。 这里有更多关于它的故事。
我想通过POST请求将对象发送到ASP.NET 4 MVC控制器,并希望它将绑定到C#模型。 前端的角度为1.5,并且不会通过表单提交发送对象。
我想发送什么
var model = {
id:1,
filters: {
filterBy: ["date"],
warehouseId: [101, 102, 103],
orderStatus: ["completed", "placed"],
currencyId: [140, 209]
}
}
C#模型看起来
public class FilterModel{
public int Id { get; set; }
public Dictionary<string, string[]> Filters { get; set; }
}
控制器功能如下所示:
[HttpPost]
public ActionResult Export(FilterModel model){
//....
}
通过调试,我可以看到,当JS对象值的数组只有一个元素时,我可以成功地获得一个包含4条记录的Dictionary结构,这是4个过滤器的键和值对。
//Seudo code
{Key:"filterBy", Value: "date"}
{Key:"warehouseId", Value: "101"}
{Key:"orderStatus", Value: "completed"}
{Key:"currencyId", Value: "140"}
我可以通过以下方式获得价值:
var warehouseId = model.Filters["warehouseId"][0] // 101
var orderStatus = model.Filters["orderStatus"][0] // completed
但是,当JS对象的数组具有多个值时,就会出现怪异的部分。 而不是4条记录,我将获得8条记录,如下所示:
//Seudo code
{Key:"filterBy", Value: "date"}
{Key:"warehouseId[0]", Value: "101"}
{Key:"warehouseId[1]", Value: "102"}
{Key:"warehouseId[2]", Value: "103"}
{Key:"orderStatus[0]", Value: "completed"}
{Key:"orderStatus[1]", Value: "placed"}
{Key:"currencyId[0]", Value: "140"}
{Key:"currencyId[1]", Value: "209"}
(请告诉我说明是否不够清楚)
我不知道为什么会这样以及如何解决? 我已更改为对每个单个过滤器键值对使用另一个模型,但仍然对这个问题的原因感到好奇。
欣赏你的智慧!
我认为您的模型是错误的。 尝试这个:
public class FilterModel
{
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("filters")]
public Filters Filters { get; set; }
}
public class Filters
{
[JsonProperty("filterBy")]
public string[] FilterBy { get; set; }
[JsonProperty("warehouseId")]
public long[] WarehouseId { get; set; }
[JsonProperty("orderStatus")]
public string[] OrderStatus { get; set; }
[JsonProperty("currencyId")]
public long[] CurrencyId { get; set; }
}
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.