#javascript #asp.net-mvc #date #datetime #kendo-ui
Вопрос:
Я использую следующий код для запроса у пользователя Даты начала и даты окончания в форме MVC
@using (Html.BeginForm("InfoEdit", "Info", FormMethod.Post, new { id = "Form" })) { lt;tablegt; lt;trgt; lt;tdgt;Start DateTimelt;/tdgt; lt;tdgt; @(Html.Kendo().DateTimePickerFor(model =gt; model.StartDateTime).Name("StartDateTime").Format("dd/MM/yyyy HH:mm tt").ParseFormats(new string[] { "dd/MM/yyyy" }).HtmlAttributes(new { style = "width:300px;", onkeydown="javascript:return false;" })) lt;/tdgt; lt;/trgt; lt;trgt; lt;tdgt;Expiration DateTimelt;/tdgt; lt;tdgt; @(Html.Kendo().DateTimePickerFor(model =gt; model.ExpirationDateTime).Name("ExpirationDateTime").Format("dd/MM/yyyy HH:mm tt").ParseFormats(new string[] { "dd/MM/yyyy" }).HtmlAttributes(new { style = "width:300px;", onkeydown="javascript:return false;" })) lt;/tdgt; lt;/trgt; lt;/tablegt; }
Код javascript выглядит следующим образом :
$(document).ready(function () { function onChange() { var StartDateTime = $("#StartDateTime").val().split(" "); var date = StartDateTime[0].split("/"); var time = StartDateTime[1].split(":"); var dd = date[0]; var MM = date[1]; var yyyy = date[2]; var HH = time[0]; var min = time[1]; var tt = StartDateTime[2]; StartDateTime = new Date(yyyy,MM-1,dd,HH,min); var ExpirationDateTime = new Date(StartDateTime.setHours(StartDateTime.getHours() 1)) $("#ExpirationDateTime").data("kendoDateTimePicker").value(ExpirationDateTime); } $("#StartDateTime").kendoDateTimePicker({ change: onChange, format: "dd/MM/yyyy HH:mm tt", parseFormats: ["dd/MM/yyyy"] }); }
У меня есть модель для значений, как показано ниже :
[Required(ErrorMessage = "Start Datetime is required.")] [DataType(DataType.DateTime)] public DateTime StartDateTime { get; set; } [Required(ErrorMessage = "Expiration Datetime is required.")] [DataType(DataType.DateTime)] public DateTime ExpirationDateTime { get; set; }
Но когда я отправляю форму, я получаю ошибку, как показано ниже :
The value '16/11/2021 11:10 AM' is not valid for StartDateTime. The value '16/11/2021 12:10 PM' is not valid for ExpirationDateTime.
Он работает в формате по умолчанию, т. е. ММ/дд/гггг, но я хочу, чтобы он работал как дд/ММ/гггг. Я пробовал использовать kendoValidator
, но это не сработало для меня, или, может быть, я использовал его неправильно.Что я могу сделать, чтобы передать формат даты дд/ММ/гггг?
Кроме того, следует отметить, что если часть даты dd меньше или равна 12, дата проходит без каких-либо ошибок.
Ответ №1:
Вы применяете форматирование в синтаксисе razor, это может быть причиной появления ошибки. Я попробовал приведенный ниже код, и это сработало для меня. Даже это будет работать в режиме редактирования.
Синтаксис Razor
@Html.TextBoxFor(m=gt;m.Время начала)
Синтаксис JavaScript
$(документ).готово(функция () { $(«#StartDateTime»).kendoDatePicker({ формат: «дд/ММ/гггг ЧЧ:мм тт», }); });
Комментарии:
1. У меня это не работает. Кроме того, при первой загрузке страницы формат даты не соответствует тому, что я намереваюсь показать.
Ответ №2:
Поскольку en-US является культурой по умолчанию, нам нужно установить культуру как en-GB. Чтобы сделать это :
lt;script src="https://kendo.cdn.telerik.com/2021.3.1109/js/cultures/kendo.culture.en-GB.min.js"gt;lt;/scriptgt; $(document).ready(function () { //set the culture kendo.culture("en-GB"); function onChange() { // code goes here } }
и измените файл Web.Config, добавив
lt;system.webgt; lt;globalization uiCulture="en-GB" culture="en-GB"gt;lt;/globalizationgt; lt;/system.webgt;