【问题标题】:VB.NET Wrong input string format error only on one control of two on the same pageVB.NET Wrong input string format error only on one control of two on the same page
【发布时间】:2021-11-14 08:50:10
【问题描述】:

我有 2 个使用 type=date 参数的文本框,显示日期如 dd/MM/yyyy

<asp:TextBox Type="date" runat="server" ID="txtScadenza" name="txtScadenza" placeholder="Scadenza" required="required" AutoPostBack="true" class="form-control input-md"></asp:TextBox>
<asp:TextBox Type="date" runat="server" ID="txtScadenzaDip" name="txtScadenzaDip" placeholder="Scadenza" AutoPostBack="false" class="form-control input-md" ></asp:TextBox>

这些文本框会收到带有此代码的日期:

txtScadenza.Text = Cliente.Scadenza.ToString("yyyy-MM-dd")
txtScadenzaDip.Text = Utente.dataScadenza.ToString("yyyy-MM-dd")

Scadenza 和 DataScadenza 这两个字段都是 SQL 数据库上的 DateTime 字段。唯一的区别是 DataScadenza 是可以为空的,而 Scadenza 不是。 我只在 txtScadenzaDip 上收到标题中的错误,而是 txtScadenza 以正确的格式显示日期......这让我发疯了。收到错误时,我知道 DataScadenza 字段具有以下值:2021-09-17 00:00:00.000 请问哪里出了问题?

【问题讨论】:

  • 您的问题中是否存在复制粘贴错误?这两个文本框具有相同的 ID 和名称。
  • 我没有在 asp:TextBox 中获得 Type 属性。您在寻找 TextMode 吗?
  • 您说 UI 以“dd/MM/yyyy”格式显示日期,但代码使用.ToString("yyyy-MM-dd")。那是怎么回事?
  • @Mary 确实,我更正了:)
  • @jmcilhinney 老实说,我不记得了,我正在遵循我的综合实践,我只是明白这些控件需要英文格式的日期,即使它们以本地格式显示。即使我必须将这些日期保存到数据库中,我也必须使用像这样的 parseExact 函数 Dim scadenza As DateTime = DateTime.ParseExact(txtScadenzaDip.Text, "yyyy-MM-dd", CultureInfo.CreateSpecificCulture("en-US") ).日期

标签: asp.net vb.net datetime date-formatting


【解决方案1】:

我发现一个简单的 DateTime 对象和一个 Nullable DateTime 对象之间有很大的不同,这里我需要做些什么来使它工作:

Dim dataScadenza As DateTime
If Utente.dataScadenza.HasValue Then
   dataScadenza = Utente.dataScadenza
   txtScadenzaDip.Text = dataScadenza.ToString("yyyy-MM-dd")
End If

编辑 正如 jmcilhinney 所指出的,还有另一个更简单的解决方案,使用 ?运营商:

txtScadenzaDip.Text = Utente.dataScadenza?.ToString("yyyy-MM-dd")

【讨论】:

  • 实际上,txtScadenzaDip.Text = Utente.dataScadenza?.ToString("yyyy-MM-dd") 可以代替所有代码。一旦执行到达空传播运算符,如果前面的表达式计算结果为Nothing,它将返回Nothing,否则它将继续以结果作为表达式其余部分的基础。这在功能上等同于txtScadenzaDip.Text = If(Utente.dataScadenza.HasValue, Utente.dataScadenza.Value.ToString("yyyy-MM-dd"), String.Empty)
  • 请注意,此解决方案不会改变您应该在项目属性和 VS 选项中打开 Option Strict On 的事实,因此对于所有未来的项目,默认情况下它将是 On。这会提醒您,当您最初编写代码时存在问题,并且会更容易解决。
  • @jmcilhinney 好的,我不知道?接线员,谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 2022-12-01
  • 2022-12-02
  • 1970-01-01
  • 2021-04-27
  • 2022-12-27
  • 1970-01-01
相关资源
最近更新 更多