Почему ASP.NET MVC жалуется на нулевой параметр, когда данные публикуются из IE, а НЕ из firefox? - PullRequest
6 голосов
/ 30 ноября 2010

Здесь происходит что-то странное.

У меня есть несколько JS, которые отправляют сообщения в ASP.NET MVC ActionMethod, который работает в любом браузере, кроме любой версии IE. Данный код выглядит следующим образом:

$.ajax({
        url: path,
        type: 'POST',
        data: { team: team_copy[team_copy.length - 1], queryDate: d.toUTCString(), newOutlets: newOutlets },
        success: function (MyResponseObject) {
            holder.append(MyResponseObject.content);
            //locate active section and click to show new content - its a mess, but it works
            //activeMenu.click();
            MessageSystem.showMessage("Target Data System", MyResponseObject.message, false);
            if (team_copy.length > 1) {
                team_copy.pop();
                $('#actualprogress').animate({ width: '+=' + TargetReports.progressratio + '%' }, 'slow');
                TargetReports.getTeamData(team_copy, d, newOutlets);
            }
            else {
                MessageSystem.showMessage("Complete", "All Data Fetched", false);
                $('#show-calendar-selection').fadeIn();
                TargetReports.buildTotalsTable("daysandcalls", "daysandcallstotal");
                TargetReports.buildTotalsTable("volumeanddistribution", "volumeanddistributiontotal");
                TargetReports.buildTotalsTable("outletactivation", "outletactivationtotal");
                TargetReports.buildTotalsTable("promotion", "promotiontotal");
                //$('#progress').fadeOut().remove();
                $('#results-options').fadeIn();
                $('#total-holder').fadeIn();
                activeMenu.click();

                //update link to download file
                var hidden = $('.hidden-information').first();
                var newOutlets = encodeURIComponent($('input[name="newoutlets"]', hidden).val());
                var queryDate = encodeURIComponent($('input[name="enddate"]', hidden).val());
                var anchor = $('#get-target-reports');
                var link = anchor.attr('href');

                link = "/manager/TargetResults.csv?endDate=" + queryDate + "&newOutlets=" + newOutlets;
                anchor.attr('href', link);
            }
        }
    });

Подпись метода действия выглядит следующим образом:

 public ActionResult GenerateTargetData(int team, DateTime queryDate, bool forceRegen = false, bool newOutlets = false)

При работе в IE .NET будет пожаловаться на пустую запись для параметра queryDate. Используя инструменты отладки в IE, я вижу, что тело запроса выглядит следующим образом:

team=7&queryDate=Mon%2C+29+Nov+2010+23%3A15%3A39+UTC&newOutlets=false

И в Firefox, который работает:

team=7&queryDate=Mon%2C+29+Nov+2010+23%3A10%3A46+UTC&newOutlets=false

Я действительно не вижу, что здесь происходит. Вся помощь приветствуется!

Ответы [ 2 ]

7 голосов
/ 21 апреля 2011

Похоже, ваша проблема связана с тем, что механизм связывания модели ASP.net MVC будет принимать дату и время в формате ISO8601.

Если время указано в UTC, добавьте «Z» сразу после времени без пробела. «Z» - обозначение зоны для нулевого смещения UTC. Следовательно, «09:30 UTC» обозначается как «09: 30Z» или «0930Z». «14:45:15 UTC» будет «14: 45: 15Z» или «144515Z».

Я проверил с Chrome 12.0.733.0 dev, Firefox 4, IE 9. Если вы вызываете javascript для UTCCring (), разные браузеры возвращают разные вещи. Chrome и Firefox вернутся: «Ср, 20 апреля 2011 г. 20:31:11 GMT », возврат только IE

d.toUTCString (). Replace ('UTC', 'Z') будет работать для вас.

2 голосов
/ 09 июля 2012

Используйте

queryDate: d.toISOString()

вместо

queryDate: d.toUTCString()

Эта дата форматируется в соответствии со стандартом ISO (что-то вроде 2012-07-09T15: 44: 03.114Z) и с радостью принятапо ASP.NET MVC

Ссылка: http://www.w3schools.com/jsref/jsref_toisostring.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...