我一直在努力从视图中获取日期值,并将其作为DateTime
使用JSON AJAX保存到数据库中,但它始终保存为空值,换句话说,当它到达时控制器的回发操作,datetime即PurchaseDate值为null,好的,让我在那里放置一个断点:
注意,在上面的图像中,Purchase_date为null,而如果我console.log()
在ajax请求之前的客户端的salesmain对象,它包含从文本框中获取的值,允许console.log(salesmain)
:
因此,购买日期是从文本框中抓取的字符串:
<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
值?任何帮助将深表感谢,在此先感谢:)
答案 0 :(得分:1)
您的客户端代码正在发布名称为PurchaseDate
的字段,而您的SalesSub
类的属性名称为Purchase_date
。模型绑定器仅在两个匹配时才起作用。
将您的视图模型属性名称更改为PurchaseDate
,它将起作用。模型绑定器将能够将有效的日期时间字符串映射到DateTime?
实例。