Joe*_*icz 7 c# formatting datetime asp.net-mvc-3
我正在用C#编写一个ASP.NET MVC3应用程序,并且发现Html.HiddenFor在我的视图中调用将呈现DateTime不同(并且不正确),如果我要调用Html.DisplayFor.
从中获取值的模型确实有一个DisplayFormat装饰器,这似乎适用Html.DisplayFor.有问题的财产写成:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime MeetingStartDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
视图使用以下内容显示:
@Html.DisplayFor(model => model.MeetingStartDate)
@Html.HiddenFor(model => model.MeetingStartDate)
Run Code Online (Sandbox Code Playgroud)
DisplayFor调用将呈现日期,16/04/2012但HiddenFor将其呈现为 value="04/16/2012 00:00:00".
我已经尝试改变当前的文化来设置一个,DateTimeFormat但这没有效果.
目前的文化是en-GB,所以它不应该打印en-US日期.
For*_*rdy 23
如果指定日期格式和html隐藏属性,则使用TextBoxFor的视图替代方法将起作用.
@Html.TextBoxFor(model => model.CreatedDate, "{0:dd/MM/yyyy HH:mm:ss.fff}", htmlAttributes: new { @type = "hidden" })
Run Code Online (Sandbox Code Playgroud)
如果要生成一个尊重您定义的格式的隐藏字段,可以定义一个自定义编辑器模板来覆盖默认的一个(~/Views/Shared/EditorTemplates/HiddenInput.cshtml):
@if (!ViewData.ModelMetadata.HideSurroundingHtml)
{
@ViewData.TemplateInfo.FormattedModelValue
}
@Html.Hidden("", ViewData.TemplateInfo.FormattedModelValue)
Run Code Online (Sandbox Code Playgroud)
现在用[HiddenInput]属性装饰你的模型属性:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
[HiddenInput(DisplayValue = false)]
public DateTime MeetingStartDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
在你看来:
@Html.DisplayFor(model => model.MeetingStartDate)
@Html.EditorFor(model => model.MeetingStartDate)
Run Code Online (Sandbox Code Playgroud)
这将使用正确的隐藏值格式:
<input data-val="true" data-val-required="The MeetingStartDate field is required." id="MeetingStartDate" name="MeetingStartDate" type="hidden" value="15/03/2012" />
Run Code Online (Sandbox Code Playgroud)