我试图通过jquery ajax调用发布一个包含多个字符串列表/数组的复杂对象。只有对象的标量属性似乎被映射,而不是数组。
我已经做了一些搜索,但找不到任何关于这个确切场景的示例或解决方案。
web api方法:
[HttpPost]
public IHttpActionResult Save(MenuSearchGuideEntry model)
{
//Do stuff
return Ok("");
}
MenuSearchGuideEntry对象:
[Table("MENUSOEGNING_GUIDE")]
public class MenuSearchGuideEntry
{
[Key]
[Column("RAEKKEID")]
[Display(Name="Række id")]
public Decimal RowId { get; set; }
[Display(Name = "Label id")]
[Column("LABELID")]
public int? LabelId { get; set; }
[Column("ACTION")]
[Display(Name = "Action")]
public string JsonAction { get; set; }
[Column("FORCESEARCH")]
[Display(Name = "Tving søgning")]
public bool ForceSearch { get; set; }
[Column("ORD")]
[Display(Name = "Søgeord")]
public string SearchKeysString { get; protected set; }
public List<string> SearchKeys
{
get
{
return ToStringList(SearchKeysString, ' ');
}
set
{
SearchKeysString = value.Aggregate<string>((a, b) => a + " " + b);
}
}
[Column("SKJULTEFIRMAER")]
[Display(Name = "Skjulte firmaer")]
public string HiddenCompaniesString { get; protected set; }
public List<string> HiddenCompanies
{
get
{
return ToStringList(HiddenCompaniesString, ' ');
}
set
{
HiddenCompaniesString = value.Aggregate<string>((a, b) => a + " " + b);
}
}
[Column("SKJULTEDOMAENER")]
[Display(Name = "Skjulte domæner")]
public string HiddenDomainsString { get; protected set; }
public List<string> HiddenDomains
{
get
{
return ToStringList(HiddenDomainsString, ' ');
}
set
{
HiddenDomainsString = value.Aggregate<string>((a, b) => a + " " + b);
}
}
[Column("PRIORITET")]
[Display(Name = "Prioritet")]
public int? Priority { get; set; }
private List<string> ToStringList(string separatedString, char separator)
{
return string.IsNullOrEmpty(separatedString)
? new List<string>()
: eparatedString.Split(separator).ToList();
}
}
Jquery Ajax调用:
function ajaxPost(data, url, redierctUrl) {
$.ajax({
url: url,
data: JSON.stringify(data),
type: 'POST',
contentType: 'application/json',
success: function () {
window.location.href = redierctUrl;
},
error: function (msg) {
}
});
}
通过Ajax发布的对象:
{
"RowId":"1920",
"priority":"",
"labelId":"9999",
"forcesSearch":"False",
"jsonAction":"KBA TEST",
"SearchKeys":["ZZZ","YYY","XXX"],
"HiddenDomains":["VAU","THG","MEK",""],
"HiddenCompanies":["MGM"]
}
答案 0 :(得分:1)
我已经玩过这个了。我相信正在发生的事情是Wep Api
使用getter
属性的List<string>
(获取新的空列表),然后将字符串添加到列表中。完成Web Api
后,将字符串添加到列表中,列表就会没有引用而被垃圾收集。 setter
似乎没有被调用。
如果您不想将模型更改为真正拥有真正的List<string>
成员,那么您可以通过从{{1}返回null
而不是new List<string>
来解决此问题} 方法。然后,当ToStringList
使用getter并获取null时,它将在稍后调用setter。
尽管如此,我认为你最好将Web API
等存储在类中的真实SearchKeys
成员中,然后使用一个属性来返回列表中的内容作为空格分隔词:
List<string>