Siento que he hecho este escenario muchas veces, y por lo general funciona, por lo que obviamente me falta algo.ASP.NET/JavaScript - ¿Por qué no es "Fallo de devolución" que no impide la devolución de datos?
Aquí está mi lado del servidor Button ASP.NET:
<asp:Button ID="btnFoo" runat="server" Text="Foo" CssClass="button foo" OnClientClick="foo_Click();" />
que consiguen que está representar en el cliente como:
<input type="submit" name="reallylongclientid" value="Foo" onclick="foo_Click();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(reallylongclientidandpostbackoptions, false, false))" id="reallylongclientid" class="button foo">
No hay sorpresas.
Aquí está la sorpresa, en mi función de JavaScript:
function foo_Click() {
return false;
}
Bueno por lo que hay más que eso, pero lo corté a probar un punto.
Cuando hago clic en el botón, llama a la función del lado del cliente y devuelve falso.
Pero todavía se publica en el servidor, ¿por qué?
Básicamente quiero hacer esto en el clic del botón:
- Do validación del lado del cliente.
- Si se aprueba la validación, publique la parte posterior
- De lo contrario, muestre algunos mensajes de error en el formulario.
Por supuesto, podría cambiar esto a un botón del lado del cliente (tipo "botón" de entrada =) y manualmente inicio a la devolución de datos cuando quiero, pero no debería tener que hacer eso. ¿O debería?
sabía que era obvia (palmadas cabeza). Gracias. – RPM1984
Acabo de notar que si lo hago "var passedValidation = new Boolean (false); return passedValidation" aún se publicará de nuevo. Pero si devuelvo falso, no lo hace. WTF? ¿algunas ideas? – RPM1984
@ RPM1984: al usar el constructor 'Boolean', con la palabra clave' new', se crea un contenedor de objetos 'Boolean' *, y en JavaScript se considera que cualquier objeto es * truthy * cuando se usa en contexto booleano, por ejemplo:' !! new Boolean (false) '==>' true', te recomendaría que simplemente usaras los literales booleanos 'true' o' false', que representan directamente valores primitivos ... – CMS