Validación del lado del cliente

Tengo un campo en una página asp.net para el que he usado RequiredFieldValidator.

<tr> 
  <td align="left" style="width: 130px"> 
    <asp:Label ID="LblPagename" runat="server" Text="Page Name " CssClass="label"></asp:Label><font 
      color="red"> *</font> 
  </td> 
  <td align="left" style="width: 1087px" class="layout-grid"> 
    <asp:TextBox ID="TxtPageName" runat="server" MaxLength="50" ></asp:TextBox> 
    <asp:RequiredFieldValidator ID="RequiredFieldValidator9" runat="server" Display="Dynamic" 
      ValidationGroup="Save" ControlToValidate="TxtPageName" ForeColor="Red"
      ErrorMessage="Please enter Page Name."></asp:RequiredFieldValidator>  
  </td> 
</tr>

al guardar estoy permitiendo CauseValidation="true" por lo mismo ValidationGroup como se ha mencionado más arriba

<tr> 
  <td colspan="3" align="center" style="width: 1193px"> 
    <asp:ImageButton ID="btnMenu" CausesValidation="true" ValidationGroup="Save" ImageUrl="~/Images/Save.png"  
      runat="server" OnClick="btnMenu_Click" OnClientClick="SaveFunctionalities();"/> 
    &nbsp;&nbsp; &nbsp;&nbsp; 
    <asp:ImageButton ID="btnCancelMenu" ImageUrl="~/Images/btnCancel.png" runat="server" 
      OnClick="btnCancelMenu_Click" /> 
  </td> 
</tr>

Pero al guardar, junto con el mensaje de error para el campo vacío, se está llamando al guardado.

Lo mismo está funcionando bien en otras páginas.

La única diferencia es que aquí tengo una llamada de función javascript OnClientClick.

¿Eso está causando algún problema?

preguntado el 04 de julio de 12 a las 08:07

1 Respuestas

Asegurar que SaveFunctionalities(); devuelve un valor booleano, dependiendo de si se ha producido un error o no. Si todo está bien, entonces regresa. true - si hay algún error volver false.

Luego actualice su OnClientClick para pasar esa variable de retorno al botón.

OnClientClick="return SaveFunctionalities();"

Si no hay problemas, el botón continuará normalmente a través de la true valor. Si hay errores, se le indicará que detenga el procesamiento a través del false .

ACTUALIZACIÓN

Del código publicado en el comentario de @Richa, siempre regresas false, sin importar lo que devuelva la validación.

Tu función debería parecerse más a esto...

function SaveFunctionalities() {
  if (Page_ClientValidate()) {
    ...
    return true;
  } else {
    return false; 
  }
}

Respondido 04 Jul 12, 09:07

Hice los siguientes cambios en la función JS: function SaveFunctionalities() { if (Page_ClientValidate()) { var ddl = document.getElementById("<%=lbMenu.ClientID%>"); var hdn = document.getElementById("<%=hdnRight.ClientID%>"); hdn.valor = ""; for (var i = 0; i < ddl.opciones.longitud; i++) { hdn.valor += ddl.opciones[i].valor + ","; } } falso retorno; } y la llamada se modificó como: OnClientClick="return SaveFunctionalities(); todavía no se está utilizando el método de guardado. ¿Dónde me estoy equivocando ahora? - Richa

@Richa, déjame verificar dos veces... ¿quieres que btnMenu envíe una publicación al servidor? if ¿La validación estándar en la página NO reporta errores? - Freefaller

Quiero que btnMenu llame a btnMenu_Click (método cs) solo cuando se hayan pasado todas las validaciones... es decir, ningún campo está vacío... SaveFunctionalities simplemente guarda los valores en un campo oculto... si se llama... está bien... - Richa

@ Richa, eso es lo que pensaba. En ese caso, todavía no has seguido completamente mi sugerencia, porque tu función es return false por todo... Actualizaré mi respuesta ahora para mostrarte cómo debería ser: Freefaller

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.