2015-02-06 105 views
0

我有一个带有DateTime属性以及其他属性的模型,但这里是日期一。如何在MVC 4中显示空白日期的jQuery datepicker

[DataType(DataType.Date)] 
    [Display(Name = "Date")] 
    public DateTime Date { get; set; } 

我在我的CSHTML文件

@model DatePickerDemo.Model.MyModel 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(model => model.Date) 
} 

使用EditorFor我有一个编辑模板

@model DateTime 
@Html.TextBox("", Model.ToShortDateString(), new {@class = "datepicker" }) 

如果我通过查看一个模型,这个精美的作品有效日期。但我需要显示一个空日期的表单。我的商业模式允许空日期。当我想显示日期时,如果有空日期,我希望日期文本框为空。这不应该太难。我看到的解决方案可以使用直线html/js而不是MVC。 我想我需要改变我的模型有空的日期,但没有我已经尝试到目前为止让我通过我的@Html.EditorFor线错误。我得到的错误是这样的:

传入字典的模型项目为null,但是此字典需要类型为“System.DateTime”的非空模型项目。

+1

*'传递到字典的模型项目是空的,但本词典需要类型System.DateTime'.' *的”非空模型项目如果你改变了你查看模型到'DateTime?日期“,你还需要将模板更改为'@model Nullable '。 – Jasen 2015-02-06 19:38:21

+0

这里甚至不需要EditorTemplate。只是'@ Html.TextBoxFor(m => m.Date,“{0:MM/dd/yyyy}”,新{@class =“datepicker”});'(或者您想要的任何格式) – 2015-02-06 21:51:46

回答

1

如果您将模型更改为接受空值,则还需要调整模板以匹配类型。

视图模型

public class MyModel 
{ 
    public DateTime? Date { get; set; } 
} 

Nullable<DateTime>没有实现.ToShortDateString()方法,你需要测试空。

编辑模板

@model DateTime? 
@{ 
    var dateStr = Model.HasValue ? Model.Value.ToShortDateString() : ""; 
} 
@Html.TextBox("", dateStr, new { @class="datepicker" }) 
相关问题