@ Html.TextBoxFor DateTime缩短谷歌浏览器的时间

时间:2014-11-10 19:23:37

标签: jquery asp.net-mvc jquery-ui google-chrome knockout.js

我的MVC 4 ViewModel具有DateTime属性,并且使用传递给View的正确DateTime(例如,2012年3月13日下午2:30或其他东西)呈现View。

    [Required(ErrorMessage = "Please enter the foo date.")]
    [DisplayName("Date:")]
    public System.DateTime fooDate { get; set; }

在View上,我有一个@ Html.TextBoxFor,它应该显示DateTime:

<div class="form-group col-sm-3">
    @Html.LabelFor(m => m.fooDate)
    @Html.TextBoxFor(m => m.fooDate, new { @class = "form-control", @placeholder = "MM/DD/YYYY", @data_bind = "value: fooDate" })
    @Html.ValidationMessageFor(m => m.fooDate)
</div>

它只显示日期(即3/13/2012),但我希望它显示DateTime。我不知道时间被切断的原因。

WEIRD ISSUES:

  1. 检查输入元素,其value属性是正确的,输入类型是text(例如,value="8/31/2011 4:00:00 PM")。尝试使用jQuery记录value属性会产生8/31/2011,时间会中断。

  2. 我将输入字段绑定到Knockout.JS,如下所示:

    fooDate: ko.observable($("#fooDate").attr("value"));
    // or
    fooDate: ko.observable($("#fooDate").val());
    

    这两个选项都没有产生正确的值:时间被切断了。使用<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>标记显示observable仅绑定DateTime的Date部分。

  3. 我确定传递给View的ViewModel包含完整的DateTime值。

  4. <input>使用class="form-control hasDatepicker"呈现,但使用jQueryUI DatePicker在此输入的代码中没有引用。

  5. 我该如何调试?问题是什么?

    编辑问题只发生在谷歌浏览器上。

    编辑#2 :此问题已通过手动清除Google Chrome的缓存(ugh)解决,与浏览器兼容性,HTML5或Javascript无关。

1 个答案:

答案 0 :(得分:1)

如果实际呈现的value属性保存正确的值并且它是文本输入类型(而不是类似日期),您指出在两个计数上都是真的,那么唯一可能的解释是一些错误的JavaScript是在渲染后操纵值。您的输入具有您未手动添加的类hasDatePicker这一事实,可以证明这一假设。您可以通过禁用JavaScript进行确认,并确认日期值是否正确。

现在,关于如何解决这个问题,这变得更加棘手。第一步是跟踪页面加载的所有脚本。这可能是页面上的实际脚本标记,但也可以使用require.js,Modernizr等动态加载脚本。由于这是Chrome,请转到开发人员工具中的“资源”选项卡并展开“框架”文件夹和代表您页面的文件夹。在那里你会找到一个“脚本”部分,在那里你将能够看到所包含的所有内容。在找到潜在的违规者后,您将不得不通过JavaScript和HTML来确定其被包含的位置和方式。