输入框为"日期"当模型是" int"

时间:2018-04-13 11:16:45

标签: c# asp.net-mvc datetime datetime-format razor-pages

我正在使用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和内置日期选择器

enter image description here

如何解决此问题?

UPDATE - Post方法返回0,可能是因为SQL中的默认值为零

public async Task<IActionResult> OnPostSaveNewRowAsync() {
 Console.WriteLine("FRDT = " + AgrRow.FrDt.ToString());
}

1 个答案:

答案 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"));
}