2

我有一个由 Razor 生成的表单,它允许用户编辑一些调度程序数据,并且效果很好。

我不明白,也从未见过的一件事是 Razor 自动生成的日期和时间选择器。

为了澄清,这些就是我所说的:

日期和时间选择器

它们都很好,但正如您在屏幕截图中看到的那样,它们不使用我的模型值。

标记本身在标签中设置了我的值,但控件会忽略它们。

这就是我的意思:

在此处输入图像描述

如您所见,这些值是在标签中设置的,但控件不尊重这些值。

我会注意到,在我的定制模型中,我有这些属性注释如下:

//For the dates...
[DataType(System.ComponentModel.DataAnnotations.DataType.Date)]

//For the time...
[DataType(System.ComponentModel.DataAnnotations.DataType.Time)]

我宁愿不必删除这些注释,但是如果它影响我达成解决方案,我会做必须做的事情。

为了解决这个问题,我想要两件事之一:

  1. 首先防止这些控件被生成,这样我就可以使用这个非常棒的 jQuery datetimepicker 插件
  2. 强制这些控件尊重并显示从我的模型传入的值。

所有建议表示赞赏。那些熟悉 MVC 的人提出的建议将更加受到赞赏。

4

3 回答 3

3
  1. @Html.TextBoxFor( x => x.StartDate, new { @class = "date" })使用一些 jquery来渲染这些,比如$('.date').datetimepicker();应用查询插件。

  2. date和输入的值time应该是格式yyyy-MM-ddHH:mm:ss- 这解释了为什么它们目前不适合你。我没有仔细研究过你想使用的插件,但它很可能会让你配置要使用的日期/时间格式。

于 2013-07-18T01:36:19.697 回答
2

我意识到这已经过时了,但谷歌把我带到了这里,所以它可能也会把其他人带到这里。

如果您尚未将 datetimepicker 插件添加到您的包中,请确保在 head 部分中添加(以及 jquery 和 jquery ui,遵循插件的说明)。

在您的模型中,在[UIHint{"DateTime")]字段上方添加属性。然后,在“~/Views/Shared/EditorTemplates”文件夹中,创建一个名为“DateTime.cshtml”的文件,其内容如下:

    @model DateTime?

    @Html.TextBoxFor(Model => Model, new { @class = "date" })

    <script type="text/javascript">
        $('#@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)').datetimepicker();
    </script>

'#@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)' 部分从 Razor 生成的 TextBox 中获取字段的 id。添加 'date' 类是可选的,但如果您想做一些自定义样式,这会有所帮助。

于 2014-03-25T07:02:01.413 回答
0

这是你的问题。价值=“上午 8:00”

应该是:值="08:00"

需要 24 小时制,例如下午 5:00 需要 17:00 的值

这个不需要jquery。使用正确的值,您就可以使用标准的 html 元素。

这是我如何在 C# Razor 页面中使用它的示例。它工作得很好,可以完美地读取和写入模型。

<input type="time" id="ShiftStartTime" name="ShiftStartTime" value="@Model.ShiftStartTime.Hour.ToString("D2")@(":")@Model.ShiftStartTime.Minute.ToString("D2")" class="form-control"/>
于 2017-02-16T18:37:16.797 回答