2010-08-06 19 views
7

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:

  1. Do validación del lado del cliente.
  2. Si se aprueba la validación, publique la parte posterior
  3. 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?

Respuesta

17

escritura return declaración por lo que cuando se hace clic en el botón que return false que no permite enviar el formulario

<asp:Button ID="btnFoo" runat="server" Text="Foo" CssClass="button foo" 
OnClientClick="return foo_Click();" /> 
+0

sabía que era obvia (palmadas cabeza). Gracias. – RPM1984

+0

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

+0

@ 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

Cuestiones relacionadas