我的视图模型:
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; }
}
(没有从DB来了。)
我的控制器:
return View(new FileTransferFilterCriteriaViewModel())
以下是获取显示两个FromDate
和ToDate
:
1/1/0001 12:00:00 AM
我的HTML:
@Html.TextBoxFor(x =>x.Criteria.FromDate)
问题:
- 如果日期是
null
的,我怎么能抑制默认的日期值的显示? - 如果日期是不是
null
的,我怎么能格式化日期为MM/dd/yyyy
?
在您的视图模型使用可空日期:
public DateTime? FromDate { get; set; }
我已经创建了一个编辑模板,这是为我工作。
更改视图模型:
[UIHint(UiHintConstants.DateCalendar)]
public DateTime? FromDate { get; set; }
[UIHint(UiHintConstants.DateCalendar)]
public DateTime? ToDate { get; set; }
之后,在浏览称为DateCalendar.chtml /共享/ EditorTemplate文件夹中创建一个编辑器模板:
@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="" />
希望这有助于一些其他人。
我无法虽然弄清楚其中的一部分,移动的规模和maxlenth了模板。 在这种情况下,它是不相关的,但有可能成为像我在那里可以锁定文本框或不想jquery的日历其他一些实例。 因为我对这个句柄我会尽快发布。
一切都可以正常使用。 你是不是从数据库中获取任何数据,但(通过传递一个新实例化视图模型证明return View(new FileTransferFilterCriteriaViewModel())
您应该考虑做你的控制器的操作方法里面。 为了获得较短的日期格式,使用@Html.TextBoxFor(x =>x.Criteria.FromDate.ToShortDateString())