Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 为什么ASP.NET MVC在从IE而不是firefox发布数据时抱怨空参数?_Asp.net Mvc_Internet Explorer - Fatal编程技术网

Asp.net mvc 为什么ASP.NET MVC在从IE而不是firefox发布数据时抱怨空参数?

Asp.net mvc 为什么ASP.NET MVC在从IE而不是firefox发布数据时抱怨空参数?,asp.net-mvc,internet-explorer,Asp.net Mvc,Internet Explorer,这里发生了一些奇怪的事情 我有一些JS发布到ASP.NET MVC ActionMethod,除了IE的任何版本之外,其他浏览器都可以找到它。 有关守则如下: $.ajax({ url: path, type: 'POST', data: { team: team_copy[team_copy.length - 1], queryDate: d.toUTCString(), newOutlets: newOutlets }, suc

这里发生了一些奇怪的事情

我有一些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);
            }
        }
    });
team=7&queryDate=Mon%2C+29+Nov+2010+23%3A15%3A39+UTC&newOutlets=false
操作方法签名如下所示:

 public ActionResult GenerateTargetData(int team, DateTime queryDate, bool forceRegen = false, bool newOutlets = false)
在IE.NET中运行时,将抱怨queryDate参数的输入为空。使用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);
            }
        }
    });
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

我真的看不出这里发生了什么。感谢大家的帮助

您的问题似乎是因为ASP.net MVC model binder将接受ISO8601格式的日期时间

如果时间以UTC为单位,则在时间后直接添加一个“Z”,不带空格。”Z'是UTC零偏移的区域指示器。因此,“09:30 UTC”表示为“09:30Z”或“0930Z”。“14:45:15 UTC”将是“14:45:15Z”或“144515Z”

我已经检查了Chrome12.0.733.0开发版、Firefox4和IE9。如果调用javascript toutString(),不同的浏览器会返回不同的内容。Chrome和Firefox将返回“2011年4月20日星期三20:31:11GMT”,仅IE返回“2011年4月20日星期三20:31:11UTC

d、 toutString().replace('UTC','Z')将适用于您

使用

而不是

queryDate: d.toUTCString()
此格式的日期符合ISO标准(类似于2012-07-09T15:44:03.114Z),并且被ASP.NET MVC欣然接受


参考:

您使用什么调试工具?Fiddler?对于IE,我使用了IE9(f12)和Fiddler附带的开发工具进行了双重检查,这是解决此问题的首选方法。注意IE8不支持toISOString-IE7支持toutString-