【问题标题】:Input box as "date" on web when model is "int"当模型为“int”时,Web 上的输入框为“日期”
【发布时间】:2018-09-23 17:45:12
【问题描述】:

我正在使用 ASP.NET Core v2 和 Razorpages

在 SQL(和模型中)中,我有一个数据类型为“int”的字段 [FrDt],我需要在其中存储日期值(作为 int)(我无法在 SQL 中更改数据类型)

如果我在模型中设置[DataType(DataType.Date)],我会自动在网络上获得输入“日期”类型。但是当我提交时,这些值不会发送到服务器。可能是因为该值是日期类型并且该字段是 int

RAZORPAGE

<input asp-for="@Model.AgrRow.FrDt" class="form-control" />

型号

[DataType(DataType.Date)]
public int FrDt { get; set; }

我的目的是将网页上输入的值转换为这样的 int:

CS 页面

AgrRow.FrDt = int.Parse(AgrRow.FrDt.ToString("yyyyMMdd"));

但输入的日期值不会发送到服务器,而是发送 0(零),因此解析不起作用。如果我从模型中删除 [DataType(DataType.Date)],我会在网络上获得一个正常的输入框,并且我输入的值会发送到服务器。

顺便说一句:我正在使用 Chrome 和内置的日期选择器

我该如何解决这个问题?

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

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

【问题讨论】:

  • 您的int 的值与(滴答声?)有什么关系
  • 您的int 值如何解释为日期 - 例如自01/01/0001 以来Ticks 的数量?
  • 您正在编辑数据,因此您使用视图模型,并且该视图模型可以包含DateTime 属性。在控制器方法中,您可以在保存数据模型时在 POST 方法中将 int 转换为 DateTime,反之亦然
  • 为什么不向您的视图模型添加一个属性,它会为您完成int -&gt; DateDate -&gt; int 的转换?
  • 正如其他人所建议的,在视图模型中使用 Date 并仅在与数据库交互时将其转换为/从 int 转换。问题解决了。

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


【解决方案1】:

使用 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"));
}

【讨论】:

  • 我无法让它工作,我正在使用 Razorpages 并且不确定您是否建议我在 pageModel 中添加公共属性?我是否需要使用 [BindProperty] 绑定该属性,抱歉不理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多