Post Ich versuche, ein komplexes Objekt, das mehrere Liste/Arrays von Zeichenfolgen, über eine Jquery Ajax-Aufruf enthalten. Es werden nur die Skalareigenschaften des Objekts abgebildet, nicht die Arrays.Wie komplexe Objekte einschließlich Listen zu ASP Web Api 2
Ich habe einige Suchen durchgeführt, kann aber keine Beispiele oder Lösungen für dieses genaue Szenario finden.
web api Methode:
[HttpPost]
public IHttpActionResult Save(MenuSearchGuideEntry model)
{
//Do stuff
return Ok("");
}
MenuSearchGuideEntry Objekt:
[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-Aufruf:
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) {
}
});
}
Objekt via Ajax posted:
{
"RowId":"1920",
"priority":"",
"labelId":"9999",
"forcesSearch":"False",
"jsonAction":"KBA TEST",
"SearchKeys":["ZZZ","YYY","XXX"],
"HiddenDomains":["VAU","THG","MEK",""],
"HiddenCompanies":["MGM"]
}
Problem ist, dass "SearchKeys" in db eine durch Leerzeichen getrennte Zeichenfolge ist. Anfangs habe ich ein wenig recherchiert, wie man Entity Framework das Mapping für mich machen lässt, anscheinend ist das nicht möglich. Und da es mir nicht erlaubt ist, das db neu zu strukturieren, indem ich "SearchKeys" in eine separate Tabelle lege, wo sie hingehören, denke ich, dass ich mit dieser Lösung gehen muss, auch wenn es keine Best Practice ist. Ändern der Null hat den Trick! Vielen Dank! –