【问题标题】:Formatting nullable DateTime fields in strong typed View在强类型视图中格式化可为空的 DateTime 字段
【发布时间】:2010-09-10 10:55:25
【问题描述】:

我的模型中有一个带有 BornDate 属性的 Person 类,定义为

[DisplayName("Born Date")]
public DateTime? BornDate { get; set; }

我在视图中将此字段用作

<td style="white-space:nowrap">
    <%= Html.LabelFor(model => model.BornDate)%>
    <br />
    <%= Html.TextBoxFor(model => model.BornDate, new { id = "bornDate" })%>
    <%= Html.ValidationMessageFor(model => model.BornDate, "*")%>
</td>

问题是当我使用 BornDate 文本框编辑 Person 实例时,其格式为

dd/MM/yyyy hh.mm.ss

虽然我想在没有时间部分的情况下格式化它(“dd/MM/yyyy”)。我无法将 toString 方法与格式字符串一起使用,因为它是一个可为空的字段。

我能做什么?

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-2 defaultmodelbinder


【解决方案1】:

您应该能够使用价值。先检查它不为空。

var displayDate = model.BornDate.HasValue ? model.BornDate.Value.ToString("yyyy") : "NoDate";

【讨论】:

  • 首先感谢您的回复。我必须把这段代码放在哪里?如果我将它放在 TextBoxFor 函数中,在 lambda 表达式中,我会得到一个 InvalidOperationException “模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。”
  • Hrm... 是的,我忘记了您使用的是强类型助手这一事实。我认为解决这个问题的唯一方法是使用 TextBox 助手:
  • 如果有人在 View check this 而不是 DisplayFor 中显示日期有问题
【解决方案2】:

我知道这已经很晚了,但我正在研究另一个问题并遇到了这个问题。有一种方法可以只显示不需要表示层格式的日期部分。

[DisplayName("Born Date")]
[DataType(DataType.Date)]
public DateTime? BornDate { get; set; }

使用这将确保您在视图上绑定到此属性的任何地方,只有日期会显示

希望这对某人有所帮助

【讨论】:

  • 在当前版本的 Razor (4+) 中不起作用;不能和年长的人说话。
  • 这不适用于所有 Html 助手,特别是 TextBoxFor
【解决方案3】:

要在您的 VIEW 中执行此操作,您也可以使用 Razor 语法:

@Html.TextBox("BornDate", item.BornDate.HasValue ? item.BornDate.Value.ToShortDateString():"")

【讨论】:

  • DisplayFor 应该如何使用?
【解决方案4】:

您可以这样做,它适用于 Nullable 模型类型:

@model DateTime?
@{
    object txtVal = "";
    if (Model.HasValue) 
    {
        txtVal = Model.Value;
    };
}
@Html.TextBoxFor(x => Model, new {Value = string.Format(ViewData.ModelMetadata.EditFormatString, txtVal))

【讨论】:

    【解决方案5】:

    我解决此问题的另一种方法是向 TextBoxFor 添加格式

    @Html.TextBoxFor(model => model.BornDate, "{0:MM/dd/yyyy}", new { id = "bornDate" })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      相关资源
      最近更新 更多