1

Для получения дополнительной информации, как для версий, используя Bootstrap 3.0.0 (построен с использованием новых шаблонов MVC, если я правильно помню), Bootstrap-datetimejs 4.0.0 (https://github.com/Eonasdan/bootstrap-datetimepicker) и ASP.NET MVC 5.Bootstrap DateTimePicker и существующие вопросы для парсинга?

Использование MVC я рендеринг кучи полей, но это одна уже существующие данные (это при проверке элемента в Chrome, так что не HtmlHelper код):

<input class="form-control timepicker input-validation-error" data-format="hh:mm PP" 
    data-val="true" data-val-date="The field Start (Time) must be a date." 
    data-val-required="The Start (Time) field is required." 
    id="MaintenanceSundayTimeStart" 
    name="MaintenanceSundayTimeStart" type="text" value="1/1/2000 8:00:00 PM"> 

код, который генерирует его:

<div class="col-sm-4"> 
    <div class="form-group"> 
    @Html.LabelFor(model => model.MaintenanceSundayTimeStart) 
    @Html.TextBoxFor(model => model.MaintenanceSundayTimeStart, 
     new { @data_format = "hh:mm PP", @class = "form-control timepicker" }) 
    </div> 
</div> 

Когда страница загружается, я называю это:

$('.timepicker').each(function() { 
    $(this).datetimepicker({ 
    format: 'LT' 
    }); 
}); 

редактировать: попытались попробовать это:

$('.timepicker').each(function() { 
    $(this).datetimepicker({ 
    pickDate: false 
    }); 
}); 

и установить данные-формат этого основывается на рассмотрении документации moment.js, хотя косые и колоны не включены по я предполагаю, что они могут быть опущены в (чтобы соответствовать 1/1/2000 8:00:00 PM)

data-format="M/D/YYYY H:mm:ss A" 

И еще, кажется, не в состоянии разобрать DateTime.

По какой-то причине, когда элемент управления отображается в текстовом поле, я вижу совершенно другое время (1:00 PM), которое говорит мне, что оно просто не сможет разобрать это значение. Я хочу, чтобы рендер был часом: только минуты AM/PM, но я думаю, что мне нужно привязываться к стандартным объектам DateTime, так? Глядя на источник, похоже, что ввод-валидация-ошибка вводится так, что может быть моей большой проблемой отправки формы, просто фокусирующей текстовое поле.

Есть ли что-то, что я делаю неправильно? Я знаю, что хочу взять «mm/dd/YYYY hh: mm: ss PP» и разобрать его, как только часть «hh: mm PP» разобрать. При сохранении я действительно забочусь только о компоненте времени (я вынуждаю дату до 1/1/2000 независимо от того, как вообще не занимаюсь компонентом даты).

edit: после дополнительных попыток я заметил, что значение, которое анализируется (в основном, путем сброса в другие значения), заключается в том, что значение, похоже, вытягивает часть MM как час. Вход будет полным временем datetime, но я хочу, чтобы пользователю был предоставлен временной компонент для управления (я заставляю все даты только 1/2/2000). На этом этапе я думаю, что если я смогу выполнить эту часть, я буду в порядке.

ответ

2

Если вы используете v4 моего DateTimePicker вы можете легко выполнить, делая это:

$('.timepicker').datetimepicker({ 
    format: 'LT' 
}); 

без дополнительных data- требуется.

Кроме того, в качестве дополнительного бонуса вы можете использовать шаблон EditorFor, чтобы настроить текстовое поле.

https://gist.github.com/Eonasdan/1f6bd021319486e23777

Model.cs

using System.ComponentModel.DataAnnotations; 
[DataType(DataType.Time)] 
public DateTime Updated { get; set; } 

Time.cshtml

//This file goes in /Shared/EditorTemplates/Time.cshtml 
//You can easily do this for DataType.Date and DataType.DateTime 
@{ 
    var attributes = new Dictionary<string, object>(); 
    attributes.Add("class", "form-control"); 
    attributes.Add("type", "datetime"); 
} 
<div class="input-group timepicker col-sm-3 col-md-3" id="@(ViewData.TemplateInfo.HtmlFieldPrefix)-timepicker"> 
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, attributes) 
    <span class="input-group-addon"> 
     <span class="fa fa-clock-o"></span> 
    </span> 
</div> 
+0

было странно, я собирался поделиться снимком экрана, не использующим свойство формата данных, и он все еще выходит на 1pm. Затем я увидел, что вы добавили шаблон редактора и отметили DateTimes как DataType (DataType.Time). Не уверен, какой из компонентов этого работает, но это исправило проблему, теперь она отображает 8pm как то, что передается. Спасибо за это (и теперь я знаю, что вы можете использовать EditorTemplates в Shared, очень прохладный добавленный бонус). – Robert

+1

У меня есть группа этих шаблонов (https://github.com/Eonasdan/File-New-Project/tree/master/GSP%20New%20Project/Views/Shared/EditorTemplates) – Eonasdan

0

Похоже, вы используете другой сборщик данных, который больше не активно развивается https://github.com/tarruda/bootstrap-datetimepicker, и я бы рекомендовал переключиться на версию, с которой вы действительно связаны. Многие из этих атрибутов данных выглядят связанными с проверкой формы, а также могут противоречить тому, что вы пытаетесь сделать. Я бы порекомендовал использовать data-val = "false", пока вы не сможете заставить сборщик работать по назначению, а затем решить любую необходимую проверку.

+0

Я не уверен на 100%, bu t Я думаю, что атрибуты data- * генерируются ASP.NET MVC. Похоже, что значение «должно иметь правильное значение» должно быть таким, что «Start (Time)» устанавливается только с помощью DisplayAttribute на модели. Я действительно понял, что использовал неправильный формат (pickDate: false), когда я смотрел в консоли Chrome, и видел, что он не определен или подобен. Переход в формат: «LT» делает всплывающее окно, но проблема с ним появляется, когда он не должен. Я фактически использую тот, с которым я связался раньше (схватил номер версии из файла bootstrap-datetimepicker.js). – Robert

+0

@Robert, если дата не имеет значения, посмотрите на ограничение значения входа только по времени. Поскольку для ограничения отображения сборщика на «только время» требуется, чтобы формат был только временем. Немного смущает, но см. Эту [скрипку] (https://jsfiddle.net/spasticdonkey/9k0tz0da/1/), которая иллюстрирует эту идею. Также убедитесь, что вы используете те же скрипты, что и в скрипке. Примечание. Я устанавливаю формат подборщика в соответствии с форматом входного значения в соответствии с [momentdocs] (http://momentjs.com/docs/#/displaying/format/) - вы можете использовать дату, как у вас, с помощью «M/D/YYYY h: mm: ss A ", но не будет возможности скрыть выбор дня –

0

Попробуйте использовать строчную 'ч' за час части формата, например:

$('.timepicker').each(function() { 
    $(this).datetimepicker({ 
    format: 'format="M/D/YYYY h:mm:ss A"' 
    }); 
});