Jquery AJAX を GET リクエストとして使用すると問題が発生します。何らかの理由で、ASP.NET MVC モデル バインダーがフィルター アイテムにバインドできないようです。アクションの結果が呼び出されますが、空のオブジェクトが作成されます。
ただし、HTTP Get から HTTP Post に変更すると、機能します。なぜでしょうか?私が理解していることから、サーバー上でデータが変更されていないため、GET を使用する方が良いでしょう。
これが私のコードの簡素化されたバージョンです:
AJAX:
$.ajax({
url: url,
contentType: 'application/json',
dataType: 'json',
type: "GET",
data: "{'filter':" + ko.toJSON(model.filter) + "}",
error: function (xhr, textStatus, errorThrown) {
},
success: function (returnedData) {
}
アクション結果:
[HttpGet]
public virtual ActionResult Index(IFilter filter)
{
ViewModel filteredViewModel = GetFilteredViewModel(filter);
if (Request.IsAjaxRequest())
{
return toJSON(filteredViewModel );
}
return View(filteredViewModel );
}
フィルター:
public class Filter: IFilter
{
public Nullable<DateTime> LogDate { get; set; }
public Nullable<int> SpecificItem_ID { get; set; }
}