.net - validacion - validar campos vacios con javascript en asp net
Controles de validaciĆ³n de ASP.NET y cuadros de confirmaciĆ³n de Javascript (8)
¿no puedes usar la propiedad EnableClientScript para el control del validador que te permite llevar a cabo la validación en el lado del cliente en tu envío, entonces la validación se disparará?
Tengo una página que usa los controles de validación de entrada del lado del servidor de .NET. Esta página también tiene un cuadro de confirmación de javascript que se activa cuando se envía el formulario. Actualmente, cuando se selecciona el botón Enviar, aparece el cuadro de confirmación de javascript y, una vez confirmado, se activan los controles de validación del lado del servidor de ASP.NET. Me gustaría disparar los controles de validación del lado del servidor ANTES de que se muestre el cuadro de confirmación de javascript.
¿Cómo se puede lograr esto? He incluido una muestra de mi código actual a continuación.
sample.aspx
<asp:textbox id=foo runat=server />
<asp:requiredfieldvalidator id=val runat=server controltovalidate=foo />
<asp:button id=submit runat=server onClientClick=return confirm(''Confirm this submission?'') />
sample.aspx.vb
Sub Page_Load()
If Page.IsPostback() Then
Page.Validate()
If Page.IsValid Then
''process page here''
End If
End If
End Sub
Gracias por cualquier ayuda.
Los validadores son despedidos por un controlador onsubmit en el formulario.
Si reemplaza su formulario, no lo haga, perderá la activación del validador, aunque es posible que pueda proporcionar manualmente el JS necesario.
Este parece ser un problema muy común.
La solución alternativa:
Valide primero la página, luego confirm
llamada, como se muestra aquí y aquí . Esto tiene el inconveniente de llamar a la validación dos veces: una en su código y otra en el código generado en el envío onclick
.
Cómo hacer que esto funcione correctamente, es decir, validar la página primero (y solo una vez), y luego mostrar el cuadro de confirm
, todavía no lo sé.
Editar: Aquí hay una sugerencia útil:
Lo que ASP.NET hace entre bastidores cuando existen controles de validación, es agregar un evento onClick autogenerado para cada botón. Este evento OnClick supercedería al evento OnClick personalizado. Entonces para superar esto hice lo siguiente:
- agregar CausesValidation = False
- se agregó Validate () y el código IsValid al evento onClick detrás de la página para simular el código de validación autogenerado que falta ahora detrás del botón.
Edit 2: un ejemplo completo
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="if (Page_ClientValidate()){ return confirm(''Do you want to submit this page?'')}" CausesValidation="false" />
Debe validar la página en el cliente mismo.
function validate()
{
Page_ClientValidate();
if (Page_IsValid)
// do your processing here
return Page_IsValid;
}
Este método se puede invocar en el evento "onClientClick" del botón y en el código subyacente, puede hacerlo si la página es válida y hacer el procesamiento si la validación del lado del cliente se realiza correctamente.
Entonces, en el evento click del botón, puede hacer
protected void SubmitButton_Click(object sender, EventArgs e)
{
if (!this.isValid)
return;
// do the processing here
}
Confirmar el cuadro en el código detrás después de la verificación de validación
<asp:Button ID="btnSave" runat="server" OnClientClick="javascript:return ConfirmSubmit()" OnClick="btnSave_Click" Text="Save" />
//---javascript -----
function ConfirmSubmit()
{
Page_ClientValidate();
if(Page_IsValid) {
return confirm(''Are you sure?'');
}
return Page_IsValid;
}
¿Qué hay de usar el control ValidatorCallout de ASP.NET Control Toolkit? De: http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ValidatorCallout/ValidatorCallout.aspx
ValidatorCallout es un extensor ASP.NET AJAX que mejora la funcionalidad de los validadores de ASP.NET existentes. Para usar este control, agregue un campo de entrada y un control de validador como lo haría normalmente. A continuación, agregue el ValidatorCallout y establezca su propiedad TargetControlID para hacer referencia al control del validador.
No he usado este, pero me parece que obtendría la validación del lado del cliente que desea.
Lo que ocurre es que la Confirmación de devolución se activa antes del javascript del validador. que todo tiene que ver con los ciclos de vida y esas cosas.
Si quieres definitivamente tener ese comportamiento, lo que deberás hacer es cambiar todos tus validadores a validadores personalizados, implementar tus propias rutinas de validación JS para los validadores personalizados y luego llamar a la confirmación al final del proceso. rutina de validación como la llamada final.
si PUEDE cambiar la secuencia de activación, si agrega el JS para la codificación de confirmación de devolución al botón en un método HIJAX donde está asignado al evento onClick después de que la página se haya cargado completamente en el navegador, pero nunca he utilizado esa metodología para esa capacidad, así que no me cites allí.