4

我的视图模型:

public partial class FileTransferFilterCriteriaViewModel
{
    public string Fice { get; set; }
    public string SourceEmail { get; set; }
    public string TargetEmail { get; set; }
    public DateTime FromDate { get; set; }
    public DateTime ToDate { get; set; }
    public string Status { get; set; }
    public string Category { get; set; }
}

(没有任何东西来自数据库。)

我的控制器:

return View(new FileTransferFilterCriteriaViewModel())

以下是FromDate和显示的内容ToDate

1/1/0001 12:00:00 AM

我的 HTML:

@Html.TextBoxFor(x =>x.Criteria.FromDate)

问题:

  1. 如果日期是null,我怎样才能抑制默认日期值的显示?
  2. 如果日期不是 null,我如何将日期格式化为MM/dd/yyyy
4

3 回答 3

13

在 ViewModel 中使用可为空的日期:

public DateTime? FromDate { get; set; }
于 2012-08-21T05:25:18.613 回答
2

我创建了一个编辑器模板,这对我有用。

视图模型的更改:

[UIHint(UiHintConstants.DateCalendar)]
        public DateTime? FromDate { get; set; }

        [UIHint(UiHintConstants.DateCalendar)]
        public DateTime? ToDate { get; set; }

之后,在 Views/Shared/EditorTemplate 文件夹中创建了一个名为 DateCalendar.chtml 的编辑器模板:

@using System.Globalization
@model DateTime?

@Html.TextBox("", (Model.HasValue && !Model.Value.ToString(CultureInfo.InvariantCulture).Contains("1900") && !Model.Value.ToString(CultureInfo.InvariantCulture).Contains("0001") ? Model.Value.ToString("MM/dd/yyyy") : string.Empty), new { @class = "datePicker", maxlength = "12", size = "12" })

然后将其用作:

@Html.EditorFor(x =>x.FromDate)
@Html.EditorFor(x => x.ToDate)

这是源代码:

<input class="datePicker" id="Criteria_FromDate" maxlength="12" name="Criteria.FromDate" size="12" type="text" value="" />

<input class="datePicker" id="Criteria_ToDate" maxlength="12" name="Criteria.ToDate" size="12" type="text" value="" />

希望这对其他人有帮助。

我无法弄清楚其中的一部分,将尺寸和最大长度从模板中移出。在这种情况下,它不相关,但可能会在某些其他情况下变得像我可能锁定文本框或不想要 jquery 日历。一旦我掌握了这个,我会尽快发布。

于 2012-08-21T06:06:19.473 回答
0

一切正常。但是,您没有从数据库中获取任何数据(通过传入一个新实例化的视图模型来证明return View(new FileTransferFilterCriteriaViewModel()))。您应该考虑在控制器的操作方法中执行此操作。要获得较短的日期格式,请使用@Html.TextBoxFor(x =>x.Criteria.FromDate.ToShortDateString())

于 2012-08-21T05:23:46.793 回答