Я работаю над корпоративным веб-приложением, созданным с использованием .NET Core 2.0, и получаю довольно неожиданные результаты, когда отправленная форма не проходит проверку.Я создаю модальное событие клика, которое заполняется формой, которая находится в частичном представлении.Частичное представление ссылается на внешний файл js, и все работает, как и ожидалось, пока форма находится в неподтвержденном или в допустимом состоянии.
Однако становится странным, когда я отправляю неверные данные через указанную форму.Проверка на стороне сервера делает свое дело, и сообщения об ошибках возвращаются в форму, как и положено.Проблема в том, что после отображения сообщений об ошибках ни один из других js, используемых для формы, не работает.
Теперь для кода.Вот js, который создает модальное и отправляет форму через site.js-
$(function () {
// stores the current URL in a variable to use for data update on modal.
var placeholderElement = $('#modal-placeholder');
$('.trigger-ajax-modal[data-toggle="ajax-modal"]').click(function (event) {
var url = $(this).data('url');
$.get(url).done(function (data) {
placeholderElement.html(data);
placeholderElement.find('.modal').modal('show');
});
});
placeholderElement.on('click', '[data-save="modal"]', function (event) {
event.preventDefault();
var form = $(this).parents('.modal').find('form');
var actionUrl = form.attr('action');
var dataToSend = form.serialize();
$.post(actionUrl, dataToSend).done(function (data) {
var newBody = $('.modal-body', data);
placeholderElement.find('.modal-body').replaceWith(newBody);
var isValid = newBody.length;
if (isValid < 1) {
placeholderElement.find('.modal').modal('hide');
location.reload();
}
});
});
Теперь для js, который останавливается после отображения ошибок проверки -
$(document).ready(function () { // <--works before form submission
//various code to do things like dynamically populate input via AJAX call based on a drop down list
// and doing simple arithmetic to avoid user error
}); // <-- not so much after form is returned as invalid
Метод HttpPOSTв моем контроллере -
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(MileageTrackerEditVM vm)
{
try
{
if (ModelState.IsValid)
{
var dto = _mapper.Map<MileageTrackerDto>(vm);
await _mileageTrackerSvc.UpdateMileageTracker(dto);
return RedirectToAction(nameof(Index));
}
return PartialView("_Create", vm);
}
catch (Exception ex)
{
Console.WriteLine("An general error has occured while trying to create a mileage entry: {0}", ex.Message);
throw;
}
}
и, конечно, тег сценариев проверки в нижней части частичного представления, который используется для модального -
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
<script type="text/javascript" src="~/scripts/MileageTrackers.js"></script>
Теперь для некоторых вариантов ямы попробовали -
добавив файл page.js
в site.js
(где живет js, запускающий модальное создание), а затем сослались на site.js
в частичном.Тот же результат
запись JS непосредственно в партиал в тегах ... тот же результат
добавление JavaScript в бритву @section
Сценариибит, используя @Scripts.Render("~/scripts/ myJavaFile.js")
.Это не только не работает, но даже не компилируется.
Кроме того, при отладке на стороне клиента, насколько я могу судить, файл js неотображается с сообщениями проверки.
Я искал верхний и нижний значения для способа отображения внешнего js-файла после сбоя проверки формы.Я не буду перечислять каждую последнюю перестановку фразы «js не работает после ошибки проверки формы» и другие способы описать мою проблему, но давайте просто оставим это в LOT.У меня нет идейисправить, я смиренно извиняюсь.Заранее благодарим за любое направление, которое вы можете предоставить.