La convalida sul caricamento della pagina tratta i controlli del campo SharePoint come vuoto
-
16-10-2019 - |
Domanda
In un particolare modulo di elenco personalizzato che sto realizzando per la mia app Web WSS 3.0, sono tenuto a convalidare la pagina quando viene caricata, in modo che eventuali errori che l'utente commette da un precedente salvataggio vengano rilevati immediatamente. Attualmente lo faccio usando Page.Validate()
nel OnLoad
metodo.
Con tutto il TextBox
e RadioButtonList
Controlli che popolo (anche nel caricamento della pagina), posso semplicemente popolarli prima di attivare un sacco di InputFormCustomValidator
controlli sulla pagina. Per quei controlli, tutto è chiaro e i campi correttamente compilati non sono contrassegnati come non validi.
Ma per il UserField
e DateTimeField
Controlli, li tratterà come vuoti per la convalida del caricamento della pagina indipendentemente dal fatto che abbiano o meno dati. Ciò si verifica entrambi quando si utilizza l'attuale UserField
e DateTimeField
controlla che recupera automaticamente i dati in base alla querystring ID elemento e quando si utilizzano la sottostante PeopleEditor
e DateTimeControl
Controlli che prepopoli sul caricamento della pagina come le caselle di testo.
Una volta che c'è stato un post-back che richiede la convalida, la convalida riconoscerà correttamente il contenuto di tali campi.
C'è qualcosa che posso fare per aggirare questo, in modo che gli utenti e i campi datetime correttamente riempiti non contrassegnato come non valido nel caricamento della pagina? Dovrei eseguire la convalida in un metodo diverso da OnLoad
? Personalmente mi piacerebbe mantenere i campi come UserField
e DateTimeField
Piuttosto che usare i controlli sottostanti, ma questo mi limita a non essere in grado di definire quando vengono popolati. Se la soluzione è di spostare la pre-popolazione del controllo in una fase precedente nel tempo, posso accontentarmi, ma rimane preferibile non doverlo fare se può essere risolto in un altro modo.
Soluzione
Hai provato a chiamare EnsureChildControls () prima di .Validate ()? Inoltre, se stai creando/caricando i controlli in modo dinamico, di solito viene fatto nell'evento CreateChildControls () piuttosto che nell'Onload () poiché la maggior parte dei controlli personalizzati deve partecipare agli eventi prima di Load ().
Altri suggerimenti
Forse prova a movonare la pagina.validate () alla chiamata all'evento OnPerender?