首页 > 解决方案 > 参数为空,但不应为空

问题描述

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

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

控制器看起来像这样

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

标签: javascriptasp.net-mvc

解决方案


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

如果您不想使用,也应该在您的 JS 文件中使用DateTime?

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

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


推荐阅读