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

时间:2011-11-29 02:57:07

标签: 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" >

问题是时间包含在值中,我的自定义日期验证需要格式为## / ## / ####的日期,从而导致验证失败。我可以轻松地更改我的自定义日期验证以使这种情况有效,但我宁愿这样做,以便隐藏字段将值放入正确的格式。

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

我确实知道我可以手动创建隐藏输入并为该值调用StartDate.ToString(“MM / dd / yyyy”),但我也在动态生成的项目列表中使用此模型,因此输入为索引并拥有像[Some-Guid] .StartDate这样的ID,这会使得输入的id和名称变得更加困难。

当将页面上的字段渲染为隐藏输入时,是否仍然以特定格式显示'value'值?

1 个答案:

答案 0 :(得分:9)

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

public class MyViewModel
{
    [UIHint("MyHiddenDate")]
    public DateTime Date { get; set; }
}

然后定义~/Views/Shared/EditorTemplates/MyHiddenDate.cshtml

@model DateTime
@Html.Hidden("", Model.ToString("dd/MM/yyyy"))

最后在您的视图中使用EditorFor帮助程序:

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

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