2011-03-30 24 views
10

Tengo un formulario HomePage.aspx que contiene un ASP vacío: Panel, una lista desplegable que permite al usuario elegir un SPFielType ... en el índice modificado, mi página HomePage.aspx.cs obtendrá el texto seleccionado y cargará un control de usuario dentro del panel, este control de usuario generará un control basado en el tipo de spfield seleccionado por el usuario y un botón que invoca la función validateForm() ... mi problema es que el Page_ClientValidate() función dentro de validateForm() no puedo encontrar el validador, también intenté dar un nombre de grupo pero todavía no funcionaba.
Cuando estoy colocando el botón dentro de mi página aspx (no se representa dinámicamente) está validando mi página. (<asp:Button ID="submitbutton" Text="Validate" runat="server" />).
Pero cuando Im que lo hacen de forma dinámica, no puedo validar los form..This es lo que estoy tratando de hacer:Error esperado del objeto Page_ClientValidate(), no puedo encontrar el validador

protected override void CreateChildControls() 
{ 
    try 
    { 
     fieldRenderingControl = this.CreateFieldRenderingControl(this.FieldType); 
     this.Controls.Add(fieldRenderingControl); 

     Button button = new Button(); 
     button.UseSubmitBehavior = false; 
     button.Text = "ValidateButton"; 
     button.ID = "ValidateButton"; 
     button.OnClientClick = "validateForm()"; 
     this.Controls.Add(button); 

     RequiredFieldValidator newValidator = new RequiredFieldValidator(); 
     newValidator.Text = "***"; 
     newValidator.ID = "valideee"; 
     newValidator.EnableClientScript = true; 
     newValidator.Enabled = true; 
     newValidator.SetFocusOnError = true; 
     newValidator.Display = ValidatorDisplay.Dynamic; 
     newValidator.ControlToValidate = fieldRenderingControl.ID; 
     this.Controls.Add(newValidator); 

    } 
    catch (Exception ex) 
    { 
    } 

} 

// la función CreateFieldRenderingControl() generará un control basado en la FieldType argumento elegido por el usuario .

gracias de antemano.

+0

¿Intentó depurar su código js utilizando herramientas del navegador como Firebug o Web Developer para ver dónde está fallando exactamente? – gbs

+0

Sí, lo hice .. él no puede reconocer el validador ... no lo sé por qué ... también traté de agregar el validador a los controles del SPFIeld pero no a la solución .. – Grace

Respuesta

0

Después de que cargó el control, verifique el control de ID por Firebug o simplemente vea el código fuente porque hay ciertos controles que cuando se ponen en otros controles, su ID cambia en la representación. Si puede, escriba también el código del código htmnl.

+0

no, no tengo ningún problema con los identificadores ... están rindiendo bien .... esta es mi función en javascript función ValidateRenderedControl() { Page_ClientValidate(); alerta (Page_IsValid); } la alerta siempre devuelve verdadero ... lo que significa que la función de validación siempre devuelve verdadero – Grace

0

probar esto (nombre del grupo pase como argumento de la función Page_ClientValidation)

Page_ClientValidation("group") 
+0

sí, ya lo intenté. no luckkkk – Grace

+0

y también probé este: this.Page.Validators.Add (newValidator); – Grace

0

Prueba esto:

newValidator.ControlToValidate = fieldRenderingControl.ClientID; 
+0

Recibí este error: El control 'Field_4a4ab3a1-d5cc-4fbb-a212-ec5697827c75' al que hace referencia la propiedad ControlToValidate de 'valideee' no se puede validar – Grace

0

En lugar de Page_ClientValidate(), utilice:

ValidatorValidate("id of field rendering control"); 

Pero, en una de sus respuestas, esta identificación es "Field_4a4ab3a1-d5cc-4fbb-a212-ec5697827c75" y esta no es una cl válida id. Los guiones no se pueden usar. Primero, asegure una identificación válida en el cliente.

3

Sharepoint tiene un capricho feo donde puede asignar un Guid para ser la identificación de un control. He visto JavaScript que fue generado por Sharepoint tratando de usar estos Guids como nombres de variables. Esto no sirve, rompe scripts, no se permiten guiones en los nombres de las variables de JavaScript. Sospecho que este es el problema que estás experimentando. Y, supongo que el culpable es this.CreateFieldRenderingControl(). Parece que ese método está generando un Id ... ¿es Id Id? Si es así, intente sobrescribir el Id con algo seguro, tal vez simplemente elimine los guiones del Guid.

fieldRenderingControl.ID.Replace("-", ""); 

Si esta no es la solución exacta, con suerte es suficiente para que apunte en la dirección correcta.

0

Tal vez este post es demasiado tarde ... pero aquí están algunas ideas ...
hay varias cosas posibles:
(1) El validador y el control para ser validados están en el mismo panel? Es posible que haya un panel oculto mientras se realiza la validación.
(2) Si está creando dinámicamente, ¿se colocó esta creación en la carga de página? y si es así, ¿se creó dentro de una función para validar la entrada por primera vez? Es posible que no sea necesario hacerlo.
(3) El uso de anulación de anulación protegida CreateChildControls() finalmente no se ejecuta en todo el proceso de recarga, especialmente si el ViewState cambia en algunos controles. Puedes ponerlo en la carga de página.
(4) Otra alternativa es colocar el botón dentro del Panel, pero el atributo visible = falso y también el validador, con el atributo habilitado = falso. Cuando ejecuta la acción, cambia estos dos Estados y puede trabajar con PostBack.

Cuestiones relacionadas