2011-10-27 4 views
0

私はHTML形式で、送信時にjQuery.ajax()を使用してサーバーに呼び出します。そう...それが呼び出す

$.ajax({ 
    url: '/MyArea/MyController/Search', 
    data: JSON.stringify($('#myForm').serializeObject()), 
    type: "POST", 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    success: function (data) { 
     // Output the results to a table. 
    } 
}); 

MVCのアクションがのparamsを取り、素敵なテーブルに表示されるJSONの負荷を送り返すように....それはすべて正常に動作します。

結果をCSV形式で返信するボタンを導入する必要があります。私は正確に同じ方法を使用していますので、

....

[1] $( '#のあるmyForm')。serializeObject()

[1の

[2] JSON.stringify結果]

を...しかし、私はそうのように[2]の結果に$の.PARAM()を使用してのステップを追加....

window.location.replace('/MyArea/MyController/DownloadCSV?' + $.param(JSON.stringify($('#myForm').serializeObject()), true)); 

日付はフォームが含まれていない限り、それはすべてが正常に動作します。

The parameters dictionary contains a null entry for parameter 'endDate' of non-nullable type 'System.DateTime' for method 

もし....私は...リクエストはこのようになっていることを

/MyArea/MyController/DownloadCSV?referenceNo=102&startDate=01%2F04%2F2011+00%3A00&endDate=31%2F10%2F2011+23%3A59&pageNo=0&pageSize=15&sortBy=&sortDir=true 

を見ることができますシオマネキを見て、私は500エラーを取得しています私は日付の必要性を削除し、それはすべて正常に動作します。

どのように私はこれを動作させることができますか?私はMVC3でGETで

感謝

答えて

1

を最新のjQueryを使用してい

は、デフォルトのモデルバインダーは、日付が不変の文化形式を使用してフォーマットされることを想定して要求します。あなたの要求は次のようになります。

/MyArea/MyController/DownloadCSV?referenceNo=102&startDate=2011-04-01&endDate=2011-10-31&pageNo=0&pageSize=15&sortBy=&sortDir=true 

これは明らかにあなたは、対応するコントローラのアクションを持っていることを前提としています

SomeViewModel
public ActionResult DownloadCSV(SomeViewModel model) 
{ 
    ... 
} 

public class SomeViewModel 
{ 
    public int ReferenceNo { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
    public int PageNo { get; set; } 
    public int PageSize { get; set; } 
    public string SortBy { get; set; } 
    public string SortDir { get; set; } 
} 

はまた、あなたのAJAXリクエストが少しovercomplicatedようです。 JSONに変換する必要はありません。以下はうまくいく:

var form = $('#myForm'); 
$.ajax({ 
    url: form.attr('action'), 
    type: form.attr('method'), 
    data: form.serialize(), 
    success: function (data) { 
     // Output the results to a table. 
    } 
}); 
+0

アドバイスありがとうございました。私はいくつかのことをやり直してきました。 – ETFairfax