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