Tengo una aplicación ASP.Net Core/Razor con un formulario simple:
<form method="post" id="my_form"> ... </form>
Estoy usando la validación integrada del lado del cliente para cosas como <input ...required>
o <input type="number" min="0" ...>
(Microsoft incluye la validación jQuery en sus plantillas de proyecto MSVS) . Todo eso funciona bien.
También estoy haciendo una validación personalizada adicional en ciertos campos. Me gustaría darle al usuario la opción de rehacer el formulario o salir del formulario por completo y redirigir a una página diferente:
<script type="text/javascript"> // Form submit $('#my_form').on('submit', function (e) { console.log('validateForm...'); //debugger; // Check basic form validation let isValid = e.target.checkValidity(); if (!isValid) return false; // Validate custom field let myCustomField = $('#myCustomField').val(); if (myCustomField != 'xyz') { let response = confirm('MyCustom field is invalid: Update webform?'); if (response) { return false; // Return to webform } else { window.location.href = "./"; // Redirect to app's landing page } ... return true; } }); </script>
PROBLEMA:
window.location.href
no me redirige inmediatamente. El JS de validación continúa y el formulario se envía al servidor.
P: ¿Debería usar algo como location.replace() en su lugar? ¿O debería tomar un enfoque completamente diferente?
Para responder a Ruikai Feng: no, Ajax habría derrotado todo el propósito de lo que estaba tratando de hacer. Quería permitirle al usuario opcionalmente a) regresar al formulario web para "corregirlo", o b) dejar el formulario por completo y saltar a una página DIFERENTE . Ajax no habría hecho esto.
Decidí "despejar", y solo hacer que mi función de validación JS devuelva "falso" si encuentra algo incorrecto. Esto SIEMPRE devuelve al usuario al formulario web. Pueden "arreglar" el problema o navegar manualmente a una página diferente.