Мне нужно передать сложный объект, представляющий фильтр данных, в действие, используя GET, который возвращает отфильтрованный набор данных в CSV-файле.
Объект фильтра похож на это на клиенте (гораздо более сложный)на самом деле, упрощенно для краткости):
var filter = {
Folders = [
{ Positive: true, Reference: { Id: 19, Name: "Container" } },
{ Positive: true, Reference: { Id: 37, Name: "Bullseye" } },
]
}
Соответствующие классы на стороне сервера выглядят примерно так:
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; }
}
Мое действие выглядит так:
[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");
}
Я пытался вызвать это действие из javascript следующим образом:
function exportFilter(aFilter) {
var params = { filter: aFilter, sort: "Name", sortAscending: true };
var destination = "MyController/Export?" + decodeURIComponent($.param(params));
document.location = destination;
}
Внутри действия правильно заданы параметры sort и sortAscending.Фильтр является объектом типа MyFilter, но его свойство Folders имеет значение null.
Не способен ли ASP.NET MVC правильно десериализовать сложные параметры таким способом (т. Е. В контексте GET)?Как правильно решить эту проблему?