Asp.net mvc ASP.NET MVC格式的隐藏日期时间

Asp.net mvc ASP.NET MVC格式的隐藏日期时间,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我有一个带有DateTime属性的模型,它被放置在一个隐藏的输入字段中 @Html.HiddenFor(m => m.StartDate) 这将生成以下HTML: <input id="StartDate" name="StartDate" type="hidden" value="1/1/2011 12:00:00 AM" > 问题是,时间包含在值中,而我的自定义日期验证需要一个格式为##/##/#####的日期,从而导致验证失败。我可以很容易地改变我的自定义日期验证

我有一个带有DateTime属性的模型,它被放置在一个隐藏的输入字段中

@Html.HiddenFor(m => m.StartDate)
这将生成以下HTML:

<input id="StartDate" name="StartDate" type="hidden" value="1/1/2011 12:00:00 AM" >

问题是,时间包含在值中,而我的自定义日期验证需要一个格式为##/##/#####的日期,从而导致验证失败。我可以很容易地改变我的自定义日期验证,使这种情况下工作,但我宁愿这样做,使隐藏字段的值在正确的格式

我尝试在model属性上使用DisplayFormat属性,但这似乎并没有改变隐藏输入的格式

我确实意识到我可以手动创建隐藏的输入,并调用StartDate.ToString(“MM/dd/yyyy”)来获取值,但我还在动态生成的项目列表中使用此模型,以便对输入进行索引,并具有类似Collection[某些Guid]的ID.StartDate,这将使计算输入的id和名称更加困难


在将页面上的字段呈现为隐藏输入时,是否仍可以使“value”值以特定格式显示?

您可以使用自定义编辑器模板:

public class MyViewModel
{
    [UIHint("MyHiddenDate")]
    public DateTime Date { get; set; }
}
然后定义
~/Views/Shared/EditorTemplates/MyHiddenDate.cshtml

@model DateTime
@Html.Hidden("", Model.ToString("dd/MM/yyyy"))
最后,在您的视图中,使用
编辑器for
助手:

@model MyViewModel
@Html.EditorFor(x => x.Date)

这将为视图模型的
Date
属性呈现自定义编辑器模板,并因此使用所需格式的值呈现隐藏字段。

工作起来很有魅力。唯一的缺点是,当字段被隐藏时,我必须为这个实例使用一个单独的模型,而不是当我实际需要它可编辑时。但是,这真的不是一件坏事。