формат даты $ .param () - PullRequest
       4

формат даты $ .param ()

0 голосов
/ 27 октября 2011

У меня есть форма в 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, которое оно вызывает, принимает параметры и отправляет обратно загрузку JSON, которая отображается в прекрасной таблице .... все это прекрасно работает.

Теперь мне нужно ввести кнопку, которая будет отправлять результаты в формате CSV.

Поэтому я использую точно такой же метод ....

[1] $ ('# myForm'). SerializeObject ()

[2] JSON.строковый результат [1]

... но я добавляю шаг использования $ .param () к результату [2] примерно так ...

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

Все работает нормально, если только даты не включены в форму.

Глядя на скрипач, я вижу, что запрос выглядит так ...

/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 ....

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

Если я уберу необходимость в датах, то все будет работать нормально.

Есть идеи, как мне заставить это работать?

Я использую последнюю версию jQuery с MVC3

Большое спасибо

1 Ответ

1 голос
/ 27 октября 2011

В запросах GET средство связывания модели по умолчанию ожидает, что даты будут отформатированы с использованием инвариантного формата культуры.Ваш запрос должен выглядеть следующим образом:

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

Это, очевидно, предполагает, что у вас есть соответствующее действие контроллера:

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

где SomeViewModel:

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-запрос выглядит немного сложным.Вам не нужно конвертировать в 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.
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...