如何使用json ajax将日期值从视图传递到控制器的操作

时间:2016-04-08 14:19:38

标签: json ajax entity-framework asp.net-mvc-5 ef-code-first

我一直在努力从视图中获取日期值,并将其作为DateTime使用JSON AJAX保存到数据库中,但它始终保存为空值,换句话说,当它到达时控制器的回发操作,datetime即PurchaseDate值为null,好的,让我在那里放置一个断点:

enter image description here

注意,在上面的图像中,Purchase_date为null,而如果我console.log()在ajax请求之前的客户端的salesmain对象,它包含从文本框中获取的值,允许console.log(salesmain)

enter image description here

因此,购买日期是从文本框中抓取的字符串:

<label>Purchase Date :</label>
@Html.TextBox("PurchaseDate")

这是我的ajax请求:

$.ajax({
        url: '/Sales/Create',
        headers: headers,
        data: JSON.stringify(salesmain),
        type: 'POST',
        dataType: 'json',
        contentType : 'application/json',
        traditional : true,
        success: function (result) {
            if (result.Success == "1") {
                //alert("saved Successfully!");
            }
            else {
                alert(result.ex);
            }
        }
    });

在json对象中的上述代码salesmain中,该对象包含将同时保存在数据库中两个表中的数据,具有一对多关系:

{ "SalesId": "", "SystemCode": "", "ReferenceNo": "", "SalesDate": "", "SalesPerson": "", "SalesSubs": [] }

在上面的JSON对象中,SalesSub数组是很多部分,此SalesSub包含Purchase_date值:

{ "ItemName": "", "Qty": "", "UnitPrice": "", "PurchaseDate": "", "SalesId": "", "SystemCode": "" }

这种一对多结构具有以下模型,即SalesMain.cs:

public class SalesMain
{
    [Key, Column(Order = 0)]
    public string SalesId { get; set; }

    [Key, Column(Order = 1)]
    public string SystemCode { get; set; }

    public string ReferenceNo { get; set; }
    public DateTime SalesDate { get; set; }
    public string SalesPerson { get; set; }

    public virtual ICollection<SalesSub> SalesSubs { get; set; }
}

与SalesSub.cs相对应的很多

[Key]
    public int SalesSubId { get; set; }

    public string ItemName { get; set; }

    public int Qty { get; set; }
    public decimal UnitPrice { get; set; }

    public DateTime? Purchase_date { get; set; }

    [ForeignKey("SalesMain"), Column(Order = 0)]
    public string SalesId { get; set; }

    [ForeignKey("SalesMain"), Column(Order = 1)]
    public string SystemCode { get; set; }

    public virtual SalesMain SalesMain { get; set; }

请注意,Purchase_date的类型为DateTime?,我从文本框string != DateTime?获取一个值作为字符串,那么它可能是一个模型绑定器问题?如果是,那么我该怎么做才能使它工作?,上面两个模型中的每个值都绑定得很好,除了Purchase_date值,它在回发后总是有一个空值。我应该怎么做才能使Purchase_date包含[HttpPost]创建操作的值,而不是null值?任何帮助将深表感谢,在此先感谢:)

1 个答案:

答案 0 :(得分:1)

您的客户端代码正在发布名称为PurchaseDate的字段,而您的SalesSub类的属性名称为Purchase_date。模型绑定器仅在两个匹配时才起作用。

将您的视图模型属性名称更改为PurchaseDate,它将起作用。模型绑定器将能够将有效的日期时间字符串映射到DateTime?实例。