参数为null,不应为null

时间:2019-06-25 04:57:34

标签: javascript asp.net-mvc

在这个清晨,我遇到了一个有点奇怪的错误。 错误很简单

  

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

控制器看起来像这样

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 GMT

2 个答案:

答案 0 :(得分:1)

您应更改为ActionResult GeneratePDF(DateTime? FirstDate, DateTime? LastDate)以防止出现大小写FirstDate,并且LastDate无法正确转换为DateTime类型

如果您不想使用DateTime?

,也应该在JS文件中使用
var firstday = new Date(xyz.setDate(first)).toISOString();
var lastday = new Date(xyz.setDate(last)).toISOString();

使用UTC字符串,无法将其强制转换为DateTime

答案 1 :(得分:1)

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

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