2011-10-27 2 views
0

제출할 때 jQuery.ajax()를 사용하여 서버에 호출하는 HTML 형식의 HTML이 있습니다. 같은 ...

$.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 결과 ]

...하지만 난의 결과에 $의 .PARAM()를 사용하는 단계를 추가 [2] 날짜가 양식을 포함하지 않는 한 모두가 잘 작동

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와

많은 감사를 최신 jQuery를 사용하고

GET에서

답변

1

기본 모델 바인더 날짜가 고정 문화권 형식을 사용하여 포맷 할 것으로 예상 요청합니다. 요청은 다음과 같아야합니다

/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