Ich muss ein komplexes Objekt, das einen Datenfilter darstellt, an eine Aktion übergeben, die GET verwendet, die einen gefilterten Datensatz in einer CSV-Datei zurückgibt.ASP.NET MVC: GET Parameter nicht richtig deserialisiert
Das Filterobjekt ist so etwas auf dem Client (viel komplexer in der Wirklichkeit, der Kürze halber vereinfacht):
var filter = {
Folders = [
{ Positive: true, Reference: { Id: 19, Name: "Container" } },
{ Positive: true, Reference: { Id: 37, Name: "Bullseye" } },
]
}
Die entsprechenden Serverseite Klassen wie folgt aussehen:
public class MyFilter
{
public List<MyComparison> Folders { get; set; }
}
public class MyComparison
{
public bool Positive { get; set; }
public MyReference Reference { get; set; }
}
public class MyReference
{
public int Id { get; set; }
public string Name {get; set; }
}
Meine Aktion sieht so aus:
[HttpGet]
public FileContentResult Export(MyFilter filter, string sort, bool sortAscending)
{
string data = GetCsvData(filter, sort, sortAscending);
return this.File(StrToByteArray(data), "text/csv", "Data.csv");
}
Ich habe versucht, diese Aktion f rom javascript wie folgt aus:
function exportFilter(aFilter) {
var params = { filter: aFilter, sort: "Name", sortAscending: true };
var destination = "MyController/Export?" + decodeURIComponent($.param(params));
document.location = destination;
}
Innerhalb der Aktion, sowohl die Art und SortAscending Parameter richtig besiedelt sind. Der Filter ist ein Objekt vom Typ MyFilter, die Eigenschaft Folders ist jedoch null.
Kann ASP.NET MVC komplexe Parameter auf diese Weise nicht richtig deserialisieren (dh im Kontext eines GET)? Was ist der richtige Weg, um dieses Problem anzugehen?
Es ist in der Lage, aber schwer zu sagen, was genau in Ihrem Fall geschieht ohne Debuggen ..:/ –
was in aFilter los ist? – Dave
aFilter erhält ein JavaScript-Objekt wie "filter" aus dem ersten Codebeispiel –