2011-06-30 29 views
1

我使用的是带有Razor和EntityFramework的MVC3。为了处理事件调度,我有一个StartDate,StartTime,EndDate,EndTime使用jquery datepicker和timepicker。我想在我的ViewModel中使用DisplayFormatAttribute,但文本框不断显示整个DateTime字符串。DisplayFormatAttribute不起作用

在我的视图模型,我有以下特性:

[DisplayFormatAttribute(DataFormatString = "{0:mm/dd/yyyy}")] 
    public DateTime StartDate { get; set; } 

    [DisplayFormatAttribute(DataFormatString = "{0:h:mm tt}")] 
    public DateTime StartTime { get; set; } 

而我的观点是这样的:

<div id="event-datetime-range" style="display:inline"> 
     <span id="event-startdatetime"> 
      @Html.TextBoxFor(model => model.StartDate, new { placeholder = "Start Date", id = "event-start-date", @class = "event-datepicker" }); 

      <span class="event-timerange">at</span> 
      @Html.TextBoxFor(model => model.StartTime, new { placeholder = "Time", id = "event-start-time", @class = "event-timepicker event-timerange" }) 
     </span> 

谁能告诉我什么,我做错了什么?提前致谢!

回答

3

DisplayFormat属性用于Html.DisplayFor()方法,不适用于Html.TextBoxFor。我会建议使用自定义EditorTemplate来显示您的日期格式。或者使用jQuery。

+0

我有一个博客张贴有关创建他们:http://buildstarted.com/2010/09/10/overriding-displayfor-and-editorfor-to-create-custom-outputs-for-mvc/ – Buildstarted

+0

我碰到这个博客来了并且正在考虑长期使用这种方法,但创建编辑器模板让我感到不舒服,因为我只有一个星期进入我的MVC和Razor体验。你说得对,Html.DisplayFor()工作。我将最终使用该模板,但现在,我会尽量灵活并使用jQuery。感谢您的回复和有用的博客文章! – BornReady

1

如果使用在创建控制JQuery的日期选择器使用dateFormat选项。

jquery datepicker

在日期/时间格式 “毫米”

也就是分钟,其中 “MM” 是个月。

您也可能想尝试的@Html.EditorFor()代替@Html.TextBoxFor()

+0

由于视图是用于新建或编辑的,dateFormat选项不会影响模型的初始值。感谢您也抓住dateFormatting错字。 – BornReady

+0

另外我没有运气切换到@ Html.EditorFor与FormatAttributes,这似乎是在我运行该视图的情况下,datepicker没有启动。现在,它默认清除文本框,这意味着它需要像BuildStarted建议的那样在jQuery中设置。 – BornReady

0

尝试使用[DisplayFormat(DisplayFormatString={"0:d})]