Javascript 参数为null,但不应为';不可能

Javascript 参数为null,但不应为';不可能,javascript,asp.net-mvc,Javascript,Asp.net Mvc,一大早我就遇到了一只奇怪的虫子。 错误很简单 参数字典包含“TimeRegPlanner.Controllers.TimeRegistrationController”中方法“System.Web.Mvc.ActionResult GeneratePDF(System.DateTime,System.DateTime)”的非null类型“System.DateTime”的参数“FirstDate”的null条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数 控制器

一大早我就遇到了一只奇怪的虫子。 错误很简单

参数字典包含“TimeRegPlanner.Controllers.TimeRegistrationController”中方法“System.Web.Mvc.ActionResult GeneratePDF(System.DateTime,System.DateTime)”的非null类型“System.DateTime”的参数“FirstDate”的null条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数

控制器看起来像这样

public ActionResult GeneratePDF(DateTime FirstDate, DateTime LastDate)
{
    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
下面是JavaScript:

function CreatePDF() {
    var xyz = document.getElementById("regDate").valueAsDate
   // var ShopDocCode = document.getElementById("werkkaart").value

    var first = xyz.getDate() - xyz.getDay() + 1;
    var last = first + 6; // last day is the first day + 6

    var firstday = new Date(xyz.setDate(first)).toUTCString();
    var lastday = new Date(xyz.setDate(last)).toUTCString();
    alert(firstday);
    alert(lastday);
    var x = document.getElementById("checkBox").checked;
    if (x === true) {
        window.location = appPath + "/TimeRegistration/GeneratePDF?FirstDate=" + firstday + "&LastDate=" + lastday;
    }

    setTimeout(function () {
        $("#dialog-Confirm").modal("hide");
    }, 3000);

}
当我在第一天和最后一天调试并记录console.log时,我可以看到它们具有正确的值:

第一天:2019年6月24日星期一00:00:00 GMT最后一天:2019年6月30日星期日 00:00:00格林尼治标准时间


您应该更改为
ActionResult GeneratePDF(DateTime?FirstDate,DateTime?LastDate)
以防止案例
FirstDate
LastDate
无法正确转换为
DateTime
类型

如果不想使用
DateTime?

var firstday = new Date(xyz.setDate(first)).toISOString();
var lastday = new Date(xyz.setDate(last)).toISOString();

使用UTC字符串时,它不能强制转换为
DateTime
您应该更改为
ActionResult GeneratePDF(DateTime?FirstDate,DateTime?LastDate)
以防止案例
FirstDate
LastDate
不能强制转换为
DateTime
类型

如果不想使用
DateTime?

var firstday = new Date(xyz.setDate(first)).toISOString();
var lastday = new Date(xyz.setDate(last)).toISOString();

使用UTC字符串,它不能转换为
DateTime

除了我以前从未见过valueAsDate之外,我肯定会对日期进行编码并删除路径中的空白

window.location = appPath + "/TimeRegistration/GeneratePDF"+
  "?FirstDate=" + encodeURIComponent(firstday) + 
  "&LastDate="  + encodeURIComponent(lastday);

除了我以前从未见过valueAsDate之外,我当然会对日期进行编码并删除路径中的空白

window.location = appPath + "/TimeRegistration/GeneratePDF"+
  "?FirstDate=" + encodeURIComponent(firstday) + 
  "&LastDate="  + encodeURIComponent(lastday);