データフィルタを表す複雑なオブジェクトを、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 javacriptのように:
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のコンテキストで)複雑なパラメータを適切にデシリアライズできないのですか?この問題に対処する正しい方法は何ですか?
それは、デバッグなしで、あなたのケースで起こっている、まさに言うことが可能な、しかし難しい..:/ –
aFilterに何が起こっているのか? – Dave
aFilterは最初のコード例から "filter"のようなjavascriptオブジェクトを取得しています –