Я пытаюсь добавить указатель даты и времени в свое веб-приложение с помощью ASP.NET MVC 5. Мое приложение локализовано в 5 культурах: английском, испанском, французском, итальянском и португальском. В этом случае time важно, так что я думаю, что bootstrap-datepicker недостаточно (скажите мне, если я ошибаюсь). Я попытался с bootstrap-datetimepicker, потому что я вижу, что использует локали, и это настраивается для даты и времени. Но я не могу заставить это работать.
Моя операционная система - Windows 10, на английском языке, но с испанской конфигурацией региона. Используя Visual Studio 2017, я создал новый проект, установил и обновил некоторые пакеты nuget. Если это помогает, я использую следующие версии:
- Microsoft.AspNet.Mvc 5.2.7
- Bootstrap 3.3.7
- jQuery 3.4.1
- Moments.js 2.24.0
- Bootstrap.v3.Datetimepicker.CSS 4.17.45
Я думаю, это все, что мне нужно. Это моя простая модель:
public class TimePeriod
{
public DateTime Begin { get; set; }
public DateTime End { get; set; }
}
Это контроллер:
public class TimePeriodController : Controller
{
// GET: TimePeriod
public ActionResult Create()
{
TimePeriod model = new TimePeriod();
model.Begin = new DateTime(2019, 11, 15, 9, 15, 00);
model.End = new DateTime(2019, 11, 18, 17, 35, 00);
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(TimePeriod model)
{
if (ModelState.IsValid)
{
...
}
return View(model);
}
}
Я добавил даты начала и окончания только для целей тестирования. Наконец, это представление:
@model DateTimePicker.Models.TimePeriod
<script type="text/javascript" src="~/Scripts/moment-with-locales.js"></script>
<script type="text/javascript" src="~/Scripts/bootstrap-datetimepicker.js"></script>
<link rel="stylesheet" href="~/Content/bootstrap-datetimepicker.css" />
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<hr />
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal col-md-12">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-row col-md-12">
<div class="form-group col-md-6">
@Html.LabelFor(model => model.Begin, htmlAttributes: new { @class = "control-label" })
<div class='input-group date date-time-picker' id='datetimepicker1'>
@Html.TextBoxFor(model => model.Begin, htmlAttributes: new { @class = "form-control", @style = "max-width: none; width: 100%" })
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
@Html.ValidationMessageFor(model => model.Begin, "", new { @class = "text-danger" })
</div>
<div class="form-group col-md-6">
@Html.LabelFor(model => model.End, htmlAttributes: new { @class = "control-label" })
<div class='input-group date date-time-picker' id='datetimepicker2'>
@Html.TextBoxFor(model => model.End, htmlAttributes: new { @class = "form-control", @style = "max-width: none; width: 100%" })
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
@Html.ValidationMessageFor(model => model.End, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-row">
<div class="form-group col-md-12">
<div>
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(function () {
$('#datetimepicker1').datetimepicker();
});
</script>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Когда я запускаю проект и перехожу к этому представлению, даты отображаются примерно так (это испанский формат, из-за конфигурации моей системы?):
- Начало: 15/11/2019 9: 15: 00
- Конец: 18/11/2019 17: 35: 00
У меня две проблемы:
- Когда я выбираю кнопку календаря даты начала, ничего не происходит, календарь не отображается, как примеры datetimepicker .
- Если я нажимаю кнопку «Создать», ничего не меняя(с теми же датами), я получаю сообщения об ошибках проверки: «Поле Begin должно быть датой» и «Поле End должно быть датой». Если я изменяю даты дат на 11/11/2019 и 12/11/2019, ошибок проверки нет, поэтому кажется, что есть проблемы с форматированием ... Если я изменяю даты на "13.11.2009 9:15:00 "и" 13.12.2009 17:35:00 ", ошибки проверки различны:" Значение '11 / 13/2019 9:15:00 'недопустимо для начала "и" Значение '12 / 13/ 2019 9:15:00 «Недействительно для End». Решено: см. Обновление ниже.
Знаете ли вы, что происходит? Я что-то пропустил? Если есть другой вариант выбора даты и времени, пожалуйста, сообщите мне.
ОБНОВЛЕНИЕ
Я решаю вопрос проверки даты и времени с помощью этого ответа: MVC 4дата выпуска культуры?