2008-08-04 24 views
24

Tengo una función de validación personalizada en JavaScript en un control de usuario en un sitio web .Net 2.0 que verifica que la tarifa pagada no exceda el monto de la cuota adeudada.Validación personalizada del lado de cliente de ASP.Net

He colocado el código del validador en el archivo ascx, y también he intentado usar Page.ClientScript.RegisterClientScriptBlock() y en ambos casos la validación se dispara, pero no puedo encontrar la función de JavaScript.

El resultado en la consola de error de Firefox es "feeAmountCheck is not defined". Aquí está la función (esto fue tomado directamente de firefox-> ver fuente)

<script type="text/javascript"> 
    function feeAmountCheck(source, arguments) 
    { 
     var amountDue = document.getElementById('ctl00_footerContentHolder_Fees1_FeeDue'); 
     var amountPaid = document.getElementById('ctl00_footerContentHolder_Fees1_FeePaid'); 

     if (amountDue.value > 0 && amountDue >= amountPaid) 
     { 
      arguments.IsValid = true; 
     } 
     else 
     { 
      arguments.IsValid = false; 
     } 

     return arguments; 
    } 
</script> 

¿Alguna idea de por qué no se ha encontrado la función? ¿Cómo puedo remediar esto sin tener que agregar la función a mi página maestra o página de consumo?

Respuesta

13

trate de cambiar los nombres de argumentos a sender y args. Y, después de que esté funcionando, cambie la llamada a ScriptManager.RegisterClientScriptBlock, independientemente del uso de AJAX.

7

Cuando se está usando .Net 2.0 y Ajax - usted debe utilizar:

ScriptManager.RegisterClientScriptBlock 

que funcionará mejor en ambientes Ajax entonces la vieja versión Page.ClientScript

0

Si bien aún me gustaría obtener una respuesta sobre por qué mi javascript no fue reconocido, la solución que encontré mientras tanto (y debería haberlo hecho en primer lugar) es usar Asp:CompareValidator en lugar de Asp:CustomValidator.

0

También se puede utilizar:

var amountDue = document.getElementById('<%=YourControlName.ClientID%>'); 

que resolverá automáticamente el ID de cliente para el elemento sin que tenga que darse cuenta de que se llama 'ctl00_footerContentHolder_Fees1_FeeDue'.

Cuestiones relacionadas