2012-02-14 31 views
5

Tengo un control de usuario donde tengo dos paneles, uno a la izquierda y otro a la derecha, a la izquierda hay información de facturación del cliente y a la derecha información de envío, cada campo en la información de envío tiene unvalidador de campo requerido, estos paneles están envueltos en un panel de actualización. El estado predeterminado es que ambos paneles están visibles, debajo de los paneles hay una casilla de verificación que dice "Envío igual que facturación", cuando lo verifica, el panel de la derecha "Panel de envío" desaparece y luego continúa.La validación sigue apareciendo aunque está deshabilitada

Edición: digamos que me quite el texto en el nombre de expedición y yo no haga clic en cualquier otro lugar, a continuación, voy a la casilla de verificación "Igual que la facturación" por un momento que muestra la validación en rojo y luego se dissapears. He intentado crear una función que desactiva el validador es decir

RequireFieldValidator1.Enabled = false; 

Funciona bien en los términos que no muestra la validación antes desaparece el panel de envío, pero digamos que cambio de opinión y haga clic de nuevo para mostrarlo . Ahora cuando borro el nombre en el panel de envío y hago clic en otro lugar, no me deja ir a ningún lado pero no muestra el texto de validación.

Así que hice esta lógica:

if (ckSameBilling.checked) 
{ 
    RequiredFieldValidator.Enabled = false; 
} 
else 
{ 
     RequiredFieldValidator.Enabled = true; 
} 

Pero ahora que volví al mismo comportamiento como si demostrada anteriormente, borrar el nombre de envío y haga clic checbox .. puedo ver la validación rojo momentáneamente.

código relacionado

//All this is wrapped in an update panel 
<asp:Panel ID="pnl" runat="server"><div> 
    asp:TextBox ID="txtShippingFirstName" runat="server" Width="130px" Columns="30" 
    MaxLength="100" asp:TextBox><div> 

<asp:RequiredFieldValidator ID="Requiredfieldvalidator1" ErrorMessage="Name Required" 
    ControlToValidate="txt" 
    runat="server" Display="Dynamic" CssClass="Error"> 
</asp:RequiredFieldValidator> 
</asp:Panel> 

<div style="margin-left: 145px;"> 
    <asp:CheckBox ID="Billing" runat="server" Font-Bold="True" 
     Text"Same as Billing" OnCheckedChanged="Billing_CheckedChanged" 
     AutoPostBack="True" /> 
</div> 

Codebehind:

protected void Billing_CheckedChanged(object sender, EventArgs e) 
{  
    if (Billing.Checked) 
    { 
     //Disable the shipping fields validations 
     DisableEnable(true); 
     pnl.Visible = false; 
    } 
    else 
    { 
     DisableEnable(false); 
     pnl.Visible = true; 
    } 
} 

private void DisableEnable(bool enable) 
{ 
    if (enableFields) 
    { 
     Requiredfieldvalidator1.Enabled = false; 
     //a bunch of required validations below... 
    } 
    else 
    { 
     Requiredfieldvalidator1.Enabled = true; 
     //a bunch of required validations below.. 
    } 
} 

Respuesta

5

¿Ha intentado deshabilitar los validadores en Javascript (no en el servidor) antes de hacer la devolución de datos del UpdatePanel?

Usted puede usar la siguiente función de lado del cliente para desactivar sus validadores:

var yourValidator = document.getElementById('yourValidatorClientID') 
ValidatorEnable(yourValidator, false); 

Esto debe parar eso 'flash' de la validación. Podría basarlo en su CheckBox cambio de lado del cliente.

También puede incluir todos sus validadores en grupos separados para cada sección y luego desactivar un grupo completo de validadores a la vez. Consulte los siguientes SO thread para más información:

Enable/disable asp.net validator controls within a specific "ValidationGroup" with jQuery?

+0

usando el enfoque jquery, muchas gracias ... No soy un gurú pero ¿cómo puedo hacerlo? comprobar el estado de la casilla de verificación en jquery? (ya sea verificado o no)? Gracias otra vez – user710502

0
private void DisableEnableShippingFieldsValidations(bool enableFields) 
{ 
    if (enableFields) 
     ckBilling.CausesValidation = false; 
    else 
     ckBilling.CausesValidation = true; 
} 

Mediante el uso de la propiedad causas validación de la casilla de verificación, que son al pasar la validación.


sugerencia

Mientras se hace validaciones, por favor utilice la propiedad Grupo de Validación de los controles para validar y para el botón/casilla de verificación que va a hacer la validación.

+0

Por qué no volver a escribir ese método para la una sola línea: 'ckSameBilling.CausesValidation = enableFields;'!? En mi experiencia, las rutas de códigos múltiples son mucho más difíciles de leer que una única ruta de código que se basa en datos.(Me gustaría reír en la última oración si alguien más lo escribió sin ejemplos de apoyo, pero este es el ejemplo de apoyo perfecto :) – sarnold

Cuestiones relacionadas