在ASP.NET MVC中将日期时间拆分为日期和时间

3
我已经阅读了Scott Hanselman的文章,涉及到这个主题。我发现另一篇文章似乎是一个更简单的方法。我决定尝试第二种方法。
然而,在创建EditorTemplates的第一部分对我来说不起作用。我复制了DateTime.ascx和TimeSpan.ascx,就像作者写的那样。然后我在我的视图中拆分了字段。
    <div class="editor-label">
        <%= Html.LabelFor(model => model.LeaveRequest.DateOfLeave)%>
    </div>
    <div class="editor-field">
        <div class="date-container">
            <%= Html.TextBoxFor(model => model.LeaveRequest.DateOfLeave.Date)%>
        </div>
        <div class="time-container">
            <%= Html.TextBoxFor(model => model.LeaveRequest.DateOfLeave.TimeOfDay)%>
        </div>
        <div class="clear">
            <%= Html.ValidationMessageFor(model => model.LeaveRequest.DateOfLeave)%>
        </div>
    </div>

我遇到的问题是,我的行为与作者所解释的不同。这里是我的结果截图。

Screenshot showing full DateTime in first field and all zeros in the second

我一定漏看了什么,但我不知道是什么。我已经读了几遍这篇文章,但仍然看不到我漏看了什么。我猜测需要有某种东西来告诉程序使用新的EditorTemplates,但我不知道如何做到。
2个回答

8
您漏掉了一个事实,即Scott的解决方案和您提供的链接都没有做到以下几点:
<%= Html.TextBoxFor(model => model.LeaveRequest.DateOfLeave.Date) %>

他们使用的是:
<%= Html.EditorFor(model => model.LeaveRequest.DateOfLeave.Date) %>

然后使用自定义编辑器将字段限制为仅日期(而不是日期和时间的组合)。

滚动到您链接的文章中的分离日期/时间字段标题下,仔细阅读有关自定义编辑器模板的内容。


1

如果需要的话,您也可以在客户端添加默认值。

<%= Html.TextBoxFor(model => model.LeaveRequest.DateOfLeave.Date,
new { @Value= DateTime.Now })%> 

这将把文本框的初始值设置为当前的DateTime,但你显然可以将其设置为任何你喜欢的值。


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