我正在使用ASP.NET Core v2和Razorpages
在SQL(和模型中)中,我有一个数据类型的字段[FrDt]
" int"我需要存储日期值(作为int)(我无法在SQL中更改数据类型)
如果我在模型中设置[DataType(DataType.Date)]
,我会自动获得输入" date"在网上输入。但是当我提交时,值不会发送到服务器。可能是因为该值的类型为date,而field为int
RAZORPAGE
<input asp-for="@Model.AgrRow.FrDt" class="form-control" />
MODEL
[DataType(DataType.Date)]
public int FrDt { get; set; }
我的目的是将网页上输入的值转换为这样的int:
CS PAGE
AgrRow.FrDt = int.Parse(AgrRow.FrDt.ToString("yyyyMMdd"));
但输入的日期值不会发送到服务器,而是发送0(零),因此解析不起作用。如果我从模型中删除[DataType(DataType.Date)],我会在Web上获得一个正常的输入框,并且我输入的值将被发送到服务器。
btw:我使用的是Chrome和内置日期选择器
如何解决此问题?
UPDATE - Post方法返回0,可能是因为SQL中的默认值为零
public async Task<IActionResult> OnPostSaveNewRowAsync() {
Console.WriteLine("FRDT = " + AgrRow.FrDt.ToString());
}
答案 0 :(得分:0)
使用View Model绑定视图而不是实际模型,它将包含DateTime属性类型。然后将视图模型映射到实际的实体模型。
查看型号:
class AgrRowVM
{
public DateTime? FrDt {get; set;}
//Rest of the properties
}
型号:
class AgrRow
{
public int? FrDt {get; set;}
//Rest of the properties
}
将值发布到服务器端映射视图模型到原始模型后。
if(agrRowVMObj.FrDt.HasValue)
{
agrRowObj.FrDt = int.Parse(agrRowVMObj.FrDt.ToString("yyyyMMdd"));
}