【问题标题】:ASP.NET MVC Format of Hidden DateTime隐藏日期时间的 ASP.NET MVC 格式
【发布时间】:2011-11-29 02:57:07
【问题描述】:

我有一个带有 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 和名称变得更加困难。

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

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

    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 属性呈现自定义编辑器模板,从而使用所需格式呈现具有值的隐藏字段。

    【讨论】:

    • 工作就像一个魅力。唯一的缺点是,当字段被隐藏时,我必须为这个实例创建一个单独的模型,而不是当我实际需要它可编辑时。但是,这确实不是一件坏事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多