Home >> c#, MVC >> MVC3中DateTime的输出格式

MVC3中DateTime的输出格式

MVC3中,DateTime日期格式的输出很出人意料,不能正常格式化,如下面这个Model:

public class DataModel{
[DisplayFormat(DataFormatString=”{0:yyyy/MM/dd}”)]
public DateTime InputDate {get;set;}
}

如果这个日期中包含了时间格式,同时又只想输出日期部分的话,会遇到一个不大不小的麻烦:时间无论如何都会输出!

在Model中定义格式 DataFormatString=”{0:yyyy/MM/dd}”

就如示例所示,其使用@Html.TextBoxFor(m=>m.InputDate, new{@class=”datepicker”}) 的输出格式就是:

<input id=”InputDate” class=”datepicker” type=”textbox” name=”InputDate” value=”2012/04/23 12:00:04 AM” />

除非使用 @Html.EditorFor(m=>m.InputDate, new {@class=”datepicker”}), 此时的输出格式为:

<input type=”text” class=”text-box single-line” readonly
data-val=”true”
data-val-inputdate=”Invalid Date”
id=”InputDate”
name=”InputDate”
type=”text”
value=”08/30/2012″ />

但是使用EditorFor的话,又无法自定义格式(class),如上,自定义的@class=”datepicker”没能输出!
如果使用内嵌html代码输出的话,就会丧失Model定义中对属性的诸多限制检查。
经过多方尝试,一个可行的方法如下:

手动覆盖Value参数

@Html.TextBoxFor(m=>m.InputDate, new{@class=”datepicker”, @Value=string.Format(“{0:yyyy/MM/dd}”)})

这个binder的代码输出是基本符合规范的

<input readonly
Value=”08/30/2012″
class=”datepicker”
data-val=”true”
data-val-autochargedate=”Invalid Date”
id=”InputDate”
name=”InputDate”
type=”text”
value=”08/30/2012 12:00:00 AM” />

之所以说这个方式基本符合规范,是因为上面的办法中,在输出的html中有两个 value/Value属性,尽管这个格式不会影响页面的正常设置(至少IE, Chrome中如此),对于一个严格的码码者来说还是很别扭。

自定义编辑模板

Model的属性定义中,[DisplayFormat(ApplyFormatInEditMode=true, DataFormatString=”{0:yyyy/MM/dd}”)], 仅仅对 @Html.DisplayFor()以及@Html.EditorFor() /当ApplyFormatInEditMode为True时 才有效。
彻底解决仅仅显示日期稍显复杂,可以通过自定义 DisplayTemplates以及 EditorTemplates来实现,比如,通过定义

~/Views/Shared/DisplayTemplates/DateOnly.cshtml
~/Views/Shared/EditorTemplates/DateOnly.cshtml

public class DataModel{
[DisplayFormat(DataFormatString=”{0:yyyy/MM/dd}”)]
[UIHint(“DateOnly”)]
public DateTime InputDate {get;set;}
}

来实现格式话日期类型。一个 DateOnly.cshtml (编辑模板)可能如下:

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

Views中的调用,必须通过 @Html.EditorFor(m=>m.InputDate)来完成. 一个完整的输出格式将如下:

<input class=”datepicker” readonly
data-val=”true”
data-val-inputdate=”Invalid Date”
id=”InputDate”
name=”InputDate”
type=”text”
value=”” />


(原文链接 http://ddbiz.com/?p=1254)

留言/有话要说

Copyright © 2012 Dimensions Data Business. All rights reserved.
server process 3.454 seconds.
WP-Backgrounds Lite by InoPlugs Web Design and Juwelier Schönmann 1010 Wien