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

7

我有一个模型,其中一个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")来获取值,但我还在使用此模型在动态生成的项目列表中,因此输入被索引并具有像Collection[Some-Guid].StartDate这样的id,这会使得弄清楚输入的id和名称稍微困难一些。
是否有任何方法可以在将字段呈现为隐藏输入时使'value'值以特定格式输出?
1个回答

10
您可以使用自定义编辑器模板:
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属性的自定义编辑模板,因此使用所需格式呈现隐藏字段的值。


1
像魔法一样好用。唯一的缺点是当该字段隐藏时,我必须拥有一个单独的模型来处理此实例,而当我需要对其进行编辑时,我又需要另一个模型。但这真的不是什么坏事。 - Nick Olsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接