validator net ejemplos custom asp c# .net asp.net validation customvalidator

c# - ejemplos - Validador de cliente de ASP.NET Validación del lado del cliente y lado del servidor no disparando



custom validator angular (7)

Esto no me ha sucedido antes, pero por alguna razón, los eventos de validación del lado del cliente y del servidor no se están desencadenando:

<asp:TextBox ID="TextBoxDTownCity" runat="server" CssClass="contactfield" /> <asp:CustomValidator ID="CustomValidator2" runat="server" EnableClientScript="true" ErrorMessage="Delivery Town or City required" ClientValidationFunction="TextBoxDTownCityClient" ControlToValidate="TextBoxDTownCity" OnServerValidate="TextBoxDTownCity_Validate" Display="Dynamic" > </asp:CustomValidator>

Evento de validación del lado del servidor:

protected void TextBoxDTownCity_Validate(object source, ServerValidateEventArgs args) { args.IsValid = false; }

Evento de validación del lado del cliente:

function TextBoxDCountyClient(sender, args) { args.IsValid = false; alert("test"); }

Pensé que al menos la validación del lado del servidor se activaría pero no. esto nunca me ha sucedido antes. Esto realmente me ha dejado perplejo.

Miré el resultado y ASP.NET reconoce la función del lado del cliente:

Salida de ASP.NET JavaScript:

var ctl00_ctl00_content_content_CustomValidator2 = document.all ? document.all["ctl00_ctl00_content_content_CustomValidator2"] : document.getElementById("ctl00_ctl00_content_content_CustomValidator2"); ctl00_ctl00_content_content_CustomValidator2.controltovalidate = "ctl00_ctl00_content_content_TextBoxDTownCity"; ctl00_ctl00_content_content_CustomValidator2.errormessage = "Delivery Town or City required"; ctl00_ctl00_content_content_CustomValidator2.display = "Dynamic"; ctl00_ctl00_content_content_CustomValidator2.evaluationfunction = "CustomValidatorEvaluateIsValid"; ctl00_ctl00_content_content_CustomValidator2.clientvalidationfunction = "TextBoxDTownCityClient";

Renderizado validador personalizado:

<span id="ctl00_ctl00_content_content_CustomValidator2" style="color:Red;display:none;">Delivery Town or City required</span>

¿Puede alguien arrojar algo de luz sobre por qué la validación del lado del cliente y del servidor no se activaría?

Editar: Typo pegué en la función incorrecta, el problema sigue siendo el mismo

Solo otra actualización del último comentario: donde el TextBox no puede estar vacío. Probé esto y no es verdad. En una página en blanco, CustomValidator activó mi función de validación del lado del cliente sin un valor:

<asp:TextBox ID="TextBox1" runat="server" /> <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="CustomValidator" ClientValidationFunction="TextBoxDAddress1Client"></asp:CustomValidator> <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />


¿Ha verificado que el control que causa la publicación tiene CausesValidation establecido en tru y que no tiene asignado un grupo de validación?

No estoy seguro de qué más podría causar este comportamiento.


Gracias por la información sobre el control para validar LukeH!

Lo que intentaba hacer en mi código era solo asegurar que algún campo de texto A tenga algo de texto en el campo cuando el campo de texto B tiene un valor particular. De lo contrario, A puede estar en blanco o lo que sea. Deshacerse de ControlToValidate = "A" en mi marca solucionó el problema.

¡Aclamaciones!


La validación del lado del cliente no se estaba ejecutando en absoluto en mi formulario web y no tenía idea de por qué. Resultó que el problema era que el nombre de la función javascript era el mismo que el ID de control del servidor.

Entonces no puedes hacer esto ...

<script> function vld(sender, args) { args.IsValid = true; } </script> <asp:CustomValidator runat="server" id="vld" ClientValidationFunction="vld" />

Pero esto funciona:

<script> function validate_vld(sender, args) { args.IsValid = true; } </script> <asp:CustomValidator runat="server" id="vld" ClientValidationFunction="validate_vld" />

Supongo que entra en conflicto con .NET Javascript interno?


La validación del lado del servidor no se activará si la validación del lado del cliente no es válida, la devolución de datos no se envía.

¿No tienes alguna otra validación que no pase?

La validación del lado del cliente no se ejecuta porque usted especificó ClientValidationFunction="TextBoxDTownCityClient" y esto buscará una función llamada TextBoxDTownCityClient como función de validación, pero el nombre de la función debería ser TextBoxDAddress1Client

(como usted escribió)


Su CustomValidator solo se activará cuando el TextBox no esté vacío.

Si necesita asegurarse de que no esté vacío, necesitará un RequiredFieldValidator también.

Nota: Si el control de entrada está vacío, no se llaman funciones de validación y la validación tiene éxito. Use un control RequiredFieldValidator para requerir que el usuario ingrese datos en el control de entrada.

EDITAR:

Si su CustomValidator especifica el atributo ControlToValidate (y su ejemplo original lo hace), entonces sus funciones de validación solo serán llamadas cuando el control no esté vacío.

Si no especifica ControlToValidate se ControlToValidate las funciones de validación cada vez.

Esto abre una segunda solución posible al problema. En lugar de utilizar un RequiredFieldValidator separado, puede omitir el atributo ControlToValidate del CustomValidator y configurar sus funciones de validación para hacer algo como esto:

Código del lado del cliente (Javascript):

function TextBoxDCountyClient(sender, args) { var v = document.getElementById(''<%=TextBoxDTownCity.ClientID%>'').value; if (v == '''') { args.IsValid = false; // field is empty } else { // do your other validation tests here... } }

Código del lado del servidor (C #):

protected void TextBoxDTownCity_Validate( object source, ServerValidateEventArgs args) { string v = TextBoxDTownCity.Text; if (v == string.Empty) { args.IsValid = false; // field is empty } else { // do your other validation tests here... } }


También verifique que no esté utilizando grupos de validación ya que esa validación no se activaría si la propiedad validationgroup estuviera configurada y no explícitamente llamada a través de

Page.Validate({Insert validation group name here});


Utilizar esta:

<asp:CustomValidator runat="server" id="vld" ValidateEmptyText="true"/>

Para validar un campo vacío.

¡No necesita agregar 2 validadores!