3

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; }
}
4

2 に答える 2