метод с любыми правилами и параметрами, которые вы хотите. В противном случае Ненавязчивый делает это для вас ... отсюда и терминология: "ненавязчивый"
й взгляд, я хочу отправить форму на контроллер с помощью ajax. У меня есть это:
@section scripts{
@Scripts.Render("~/bundles/jqueryval")
<script>
$(document).ready(function() {
// Mask
$("#Teu_Rate").mask("####.##", { reverse: true });
$("#Mcsap_Rate").mask("####.##", { reverse: true });
// Submission
var redirectUrl = '@Url.Action("Index", "tblPersonnels")';
var settings = {};
settings.baseUri = '@Request.ApplicationPath';
var infoGetUrl = "";
if (settings.baseUri === "/Scalehouse") {
infoGetUrl = settings.baseUri + "/tblPersonnels/Create/";
} else {
infoGetUrl = settings.baseUri + "tblPersonnels/Create/";
}
// ajax portion
$("form").validate({
submitHandler: function(form) {
$.ajax({
url: infoGetUrl,
method: "POST",
data: $("form").serialize(),
beforeSend: disableCreateBtn(),
success: function() {
console.log("success");
toastr.options = {
positionClass: "toast-top-full-width",
onHidden: function() {
window.location.href = redirectUrl;
},
timeOut: 3000
}
toastr.success("Personnel successfully created")
},
error: function(jqXHR, textStatus, errorThrown) {
toastr.options = {
positionClass: "toast-top-full-width",
onHidden: function() {
enableCreateBtn();
},
timeOut: 3000
}
var status = capitalizeFirstLetter(textStatus);
var error = $.parseJSON(jqXHR.responseText);
console.log(error);
}
})
}
});
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
function disableCreateBtn() {
$('#Personnel-Create-Btn').prop('disabled', true);
}
function enableCreateBtn() {
$('#Personnel-Create-Btn').prop('disabled', false);
}
});
</script>
}
Когда запрос выполнен и успешно завершен, я должен получить сообщение в консоли и уведомление о тостере, но я не получаю ни одного, и я не получаю никаких ошибок консоли, но вводимая мной запись успешно вводится, так что это означает, что форма отправляется через обычные соглашения MVC.
Как я могу заставить мою работу с AJAX работать?
Обновить
После комментариев ниже со Sparky я изменил свой код на:
$("form").submit(function (t) {
t.preventDefault();
$.ajax({
url: infoGetUrl,
method: "POST",
data: $("form").serialize(),
beforeSend: disableCreateBtn(),
success: function() {
console.log("success");
toastr.options = {
positionClass: "toast-top-full-width",
onHidden: function() {
window.location.href = redirectUrl;
},
timeOut: 3000
}
toastr.success("Personnel successfully created");
},
error: function(jqXHR, textStatus, errorThrown) {
toastr.options = {
positionClass: "toast-top-full-width",
onHidden: function() {
enableCreateBtn();
},
timeOut: 3000
}
var status = capitalizeFirstLetter(textStatus);
//var error = $.parseJSON(jqXHR.responseText);
console.log(jqXHR);
}
});
});
Теперь, если форма пуста ... и я нажимаю кнопку создания ... каким-то образом ajax входит в функцию успеха, давая мне мои ошибки проверки некоторых полей, которые требуются ... затем перенаправляется на другую страницу, как если бы запрос был успешно .. есть идеи?
Обновление 2
Я получил это с помощью этого синтаксиса:
$("form").data("validator").settings.submitHandler =
function(form) {
$.ajax({
url: infoGetUrl,
method: "POST",
data: $("form").serialize(),
beforeSend: disableCreateBtn(),
success: function () {
console.log("success");
toastr.options = {
positionClass: "toast-top-full-width",
onHidden: function () {
window.location.href = redirectUrl;
},
timeOut: 3000
}
toastr.success("Personnel successfully created.");
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR);
toastr.options = {
positionClass: "toast-top-full-width",
onHidden: function () {
enableCreateBtn();
},
timeOut: 3000
}
var status = capitalizeFirstLetter(textStatus);
var error = $.parseJSON(jqXHR.responseText);
console.log(error);
var modelState = error.modelState;
//console.log(modelState);
$.each(modelState,
function (key, value) {
var id = "";
if (key === "$id") {
id = "#" + key.replace('Я не знаю почему, но это работает .. Мне интересно услышать, почему, хотя
, '').substr(0, 1).toUpperCase() + key.substr(2);
} else {
//console.log(key);
var status = capitalizeFirstLetter(textStatus);
toastr.error(status + " - " + modelState[key]);
}
var input = $(id);
//console.log(id); // result is #id
if (input) { // if element exists
console.log(id);
input.addClass('input-validation-error');
}
});
}
});
}
Я не знаю почему, но это работает .. Мне интересно услышать, почему, хотя