Я использую дату сборщика данных jqueryui (нестандартный формат: сборщик дат "MM yy" / C # "MMMM гггг"). Когда форма не проходит проверку на стороне сервера, предварительно введенные даты не отображаются повторно при возврате в форму (т. Е. Входные данные пусты). Обратите внимание, что средство выбора даты, кажется, работает нормально в этом отношении, когда используются стандартные форматы даты (то есть не указано / по умолчанию). Также обратите внимание, что проверка работает нормально, когда сбой проверяется на стороне клиента.
Я полагаю, это связано с тем, что нестандартный формат даты не распознается датчиком при возврате проверки, потому что, если я выберу дату, отключите JavaScript в моем браузере (или закомментируйте оператор $("#internGradDate").datepicker...
(ниже). )), а затем отправьте форму для сбоя проверки на стороне сервера, дата будет отображаться нормально.
Ниже приведены некоторые многообещающие методы, которые я пытался установить формат даты в представлении, но безрезультатно:
Дата только из TextBoxFor ()
@Html.TextBoxFor(m => m.internGradDate, "{0:MMMM yyyy}")
Возвращенное значение DatePicker в неправильном формате
@Html.TextBoxFor(model => model.internGradDate,
new { Value = Model.internGradDate.HasValue ?
Model.internGradDate.Value.ToString("MMMM yyyy") : string.Empty })
Наконец, если я просматриваю элемент ввода datepicker в инструментальных средствах разработчика Chrome «Элементы», атрибут «value» выглядит нормально (например, value = «April 2019»), хотя сам ввод пустой.
Javascript
$("#internGradDate")
.datepicker({ dateFormat: "MM yy", changeYear: true, yearRange: '1988:2028' })
.attr('readonly', 'true')
.datepicker("option", "changeMonth", true)
.datepicker("option", "showButtonPanel", true)
.datepicker("option", "onClose", function (e) {
var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
$(this).datepicker("setDate", new Date(year, month, 1))
})
.keypress(function (event) {
if (event.keyCode == 8) {
event.preventDefault();
}
});
Объект передачи данных (DTO)
[Display(Name = "Graduation ")]
[DisplayFormat(DataFormatString = "{0:MMMM yyyy}", ApplyFormatInEditMode = true)]
public DateTime? internGradDate { get; set; }
код бритвы
<div class="row form-group form-group-override">
<div class="col-sm-6">
@Html.LabelFor(model => model.internGradDate, htmlAttributes: new { @class = "control-label request-label" })
</div>
<div class="col-sm-6">
@Html.TextBoxFor(model => model.internGradDate, "{0:MMMM yyyy}")
@Html.ValidationMessageFor(model => model.internGradDate, "", new { @class = "text-danger" })
</div>
</div>
Действие контроллера
[HttpPost]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Add(Intern_DTO it, HttpPostedFileBase file1)
{
var Ntid = Session["username"].ToString();
string fileExt = "";
//Limit upload file size to 4 MB
if (file1 != null)
{
if (file1.ContentLength > 4194304)
{
ModelState.AddModelError("file1", "Please do not exceed 4 MB image size");
}
else
{
fileExt = Path.GetExtension(file1.FileName).ToLower();
if (fileExt != ".doc" && fileExt != ".docx" && fileExt != ".pdf")
ModelState.AddModelError("file1", "Resume filetypes must be docx, doc, or pdf");
}
}
if (!ModelState.IsValid)
{
string message = "We encountered an issue while create the Admin record. Please review the records below.";
TempData.Remove("message");
TempData.Add("message", message);
return View(it);
}
else
{
...
}
}
Итак, для подведения итогов неясно, почему ввод datepicker пуст при возврате в форму проверки на стороне сервера, хотя его атрибут value показывает ожидаемое содержимое (например, «April 2019», то же самое, что и предварительная форма представления).
Дайте мне знать, если возникнут вопросы, и спасибо за любые идеи.