隐藏日期的默认值

时间:2012-08-21 05:21:05

标签: asp.net-mvc-3 datetime html.textboxfor

我的视图模型:

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())

以下是FromDateToDate显示的内容:

1/1/0001 12:00:00 AM

我的HTML:

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

问题:

  1. 如果日期为null,如何取消显示默认日期值?
  2. 如果日期 null,如何将日期格式设为MM/dd/yyyy

3 个答案:

答案 0 :(得分:11)

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

public DateTime? FromDate { get; set; }

答案 1 :(得分: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日历。一旦我掌握了这个,我就会发布。

答案 2 :(得分:0)

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