发布到控制器时,jQuery datepicker的出生日期为空

发布到控制器时,jQuery datepicker的出生日期为空,jquery,ajax,datepicker,Jquery,Ajax,Datepicker,我不明白为什么日期总是空的。我的部分看法是: <td> @Html.DisplayNameFor(x => x.Patient.DateOfBirth) </td> <td> @Html.TextBoxFor(x => x.Patient.DateOfBirth, new { @id = "txtPatientDa

我不明白为什么日期总是空的。我的部分看法是:

            <td>
                @Html.DisplayNameFor(x => x.Patient.DateOfBirth)
            </td>
            <td>
                @Html.TextBoxFor(x => x.Patient.DateOfBirth, new { @id = "txtPatientDateOfBirth", @class = "normalText" })
            </td>
然后我尝试用AJAX发布它:

        $.ajax({
            type: 'POST',
            data: $("#formPreArrival").serializeArray(),
            url: '@Url.Action("AddPreArrival")',
            success: function (data) {
                if (data.Errors === 'ERRORS') {
                    ErrorDialog("#MessageDialog", "#lblError", "There was an error detected in the submission of data.  Please try again later. ", "Error");
                    return false;
                }
                else {
                    ErrorDialog("#MessageDialog", "#lblError", "Patient Pre-Arrival data has been successfully entered. ", "Record Added");
                    $("#formPreArrival")[0].reset();
                    $('body, html').animate({ scrollTop: $('form').offset().top }, 'slow');
                    return false;
                }
            }
但模型字段“出生日期”始终显示为空:

    [HttpPost]
    public ActionResult AddPreArrival(PreArrivalModel model)
    {
        string retval = "";
        if (!ModelState.IsValid)
        {
            var errors = ModelState.Where(x => x.Value.Errors.Count > 0).Select(x => new { x.Key, x.Value.Errors }).ToArray();
            model.Errors = "ERRORS";
            retval = "ERRORS";
            return Json(retval);
        }
        retval = Repository.AddPreArrival(model);

        return Json(JsonConvert.SerializeObject(retval));
    }
到达前模型的部分:

    [Display(Name = "Transfer Category:")]
    public string CallTransferCategory { get; set; }

    public PatientModel Patient { get; set; }

    public TransferringFacilityModel TransferringFacility { get; set; }

    public UserModel User { get; set; }

    [Display(Name ="DEERS Verification: Is patient ELIGIBLE for care?")]
    public bool DeersVerify { get; set; }

    [Display(Name ="Comments:")]
    public string Notes { get; set; }

    public string Errors { get; set; }

    [Display(Name = "DOB:")]
    public DateTime? DateOfBirth { get; set; }

    [Display(Name = "DOB:")]
    public string DateOfBirthForDisplay
    {
        get
        {
            if (DateOfBirth.HasValue)
            {
                return DateOfBirth.Value.ToShortDateString();
            }
            return "";
        }
    }
患者模型的部分:

    [Display(Name = "Age:")]
    public int Age
    {
        get
        {
            if (DateOfBirth.HasValue)
            {
                return DateTime.Today.Year - DateOfBirth.Value.Year;
            }
            return 0;
        }
    }

    [Display(Name = "DOB:")]
    public DateTime? DateOfBirth { get; set; }

    [Display(Name = "DOB:")]
    public string DateOfBirthForDisplay
    {
        get
        {
            if (DateOfBirth.HasValue)
            {
                return DateOfBirth.Value.ToShortDateString();
            }
            return "";
        }
    }

尝试
$(“#formPreArrival”).serialize()
而不是
$(“#formPreArrival”).serializeArray()
@ADyson-已经尝试过了,同样的结果。请给我们看看PreArrivalModel是什么样子。还执行
console.log($(“#formPreArrival”).serialize()可能在以下方面很有用:well@ADyson-患者模型是到达前模型的一部分。奇怪的是,如果我在到达前模型中添加一个DOB字段,并将该字段用于患者的DOB,它将进入动作ok。然后我用这个值填充病人的dob。非常奇怪,为什么它只忽略子模型的日期字段。我不知道我是否理解。什么是患者模型?它与患者模型有什么关系?您的行为所接受的模型是婚前模型。你能发布这两个模型吗?试试
$(“#formPreArrival”).serialize()
而不是
$(“#formPreArrival”).serializeArray()
@ADyson-已经尝试过了,同样的结果。你能告诉我们PreArrivalModel是什么样子吗。还执行
console.log($(“#formPreArrival”).serialize()可能在以下方面很有用:well@ADyson-患者模型是到达前模型的一部分。奇怪的是,如果我在到达前模型中添加一个DOB字段,并将该字段用于患者的DOB,它将进入动作ok。然后我用这个值填充病人的dob。非常奇怪,为什么它只忽略子模型的日期字段。我不知道我是否理解。什么是患者模型?它与患者模型有什么关系?您的行为所接受的模型是婚前模型。你能把这两种型号都贴出来吗?
    [Display(Name = "Age:")]
    public int Age
    {
        get
        {
            if (DateOfBirth.HasValue)
            {
                return DateTime.Today.Year - DateOfBirth.Value.Year;
            }
            return 0;
        }
    }

    [Display(Name = "DOB:")]
    public DateTime? DateOfBirth { get; set; }

    [Display(Name = "DOB:")]
    public string DateOfBirthForDisplay
    {
        get
        {
            if (DateOfBirth.HasValue)
            {
                return DateOfBirth.Value.ToShortDateString();
            }
            return "";
        }
    }