【发布时间】:2015-09-16 03:13:54
【问题描述】:
在客户端,我使用 AngularJS,而在服务器端,我使用 ASP.NET WebAPI。
我有两个视图模型,ProductCriteriaViewModel 和 SimpleDisplayFieldViewModel:
public class ProductCriteriaViewModel
{
public int ID { get; set; }
public int? UserSearchID { get; set; }
public bool? Enabled { get; set; }
public SimpleDisplayFieldViewModel Property { get; set; }
public string Operator { get; set; }
public string CriteriaValue { get; set; }
}
public class SimpleDisplayFieldViewModel
{
public string Name { get; set; }
public string Value { get; set; }
public string PropertyType { get; set; }
}
在 Angular 中,我使用以下签名向 WebAPI 控制器操作提交 POST 请求:
public IList<...> FindProducts(List<ProductCriteriaViewModel> criteriaVM, bool userFiltering)
{
...
}
在测试中,我尝试发送一个 Product Criterias 数组,并检查 Fiddler 以查看该数组在 POST 请求正文中的外观,当它被发送到服务器时。这是数组的样子:
[
{"Enabled":true,
"Operator":"Less than",
"Property":
{"$id":"2",
"Name":"Copyright Year",
"Value":"Basic",
"PropertyType":null},
"CriteriaValue":"2013",
"IsNew":true},
{"Enabled":true,
"Operator":"Greater Than",
"Property":
{"$id":"2",
"Name":"Copyright Year",
"Value":"Basic",
"PropertyType":null},
"CriteriaValue":"1988",
"IsNew":true}
]
上面的数组有正确的值,但是服务器端反序列化的结果不正确。这就是奇怪的地方。
服务器反序列化数组并到达控制器动作后,criteriaVM中的第一个元素是正确的,所有的值都设置正确。但是第二个元素不正确,CriteriaValue 和 Property 被清空:
仅当我为多个条件(即版权 1988)选择相同搜索属性时,才会出现此问题。但是,如果我选择不同的属性(即版权 20),则生成的 criteriaVM 中的所有元素都会正确初始化。
我不明白是什么导致了这个问题。为什么 List 的第二个元素中只有 CriteriaValue 和 Property 设置为 null?为什么仅当我选择多个相同的搜索属性时才会出现此问题?
【问题讨论】:
标签: c# angularjs asp.net-web-api