22 messaggi dal 07 gennaio 2006
Allora ho la mia solita pagin aspx.
Al suo interno è presente una serie di campi e una serie di validator tra i quali anche un CustomValidator.

il mio CustomValidator è collegato ad una funzione di validazione server chiamata ad esempio "CheckCustum".

Sul Page_Load della pagina ho inserito questo codice

        if (IsPostBack)
        {
            this.Validate();

            if (IsValid) { .. }
      else { ... }
  }


Utilizzando il trace all'interno della pagina, quando genero il postback questo è il risultato

aspx.page Begin PreLoad
aspx.page End PreLoad
aspx.page Begin Load
aspx.page End Load
aspx.page Begin ProcessPostData
aspx.page End ProcessPostData
aspx.page Begin Raise ChangedEvents
aspx.page End Raise ChangedEvents
aspx.page Begin Raise PostBackEvent
aspx.page End Raise PostBackEvent
aspx.page Begin LoadComplete
aspx.page End LoadComplete
aspx.page Begin PreRender 


Il problema qual'è??

E' che se io richiamo "this.Validate()" all'interno del load, scateno la validazione di tutti i ValidationControl compreso il custom che richiama la funzione "CheckCustom".

Solo che una volta terminato il load....la funzione "Validate()" viene richiamata da

aspx.page Begin Raise PostBackEvent


E quindi la pagina viene validata 2 volte.

Non c'è modo di evitare questo?!?!....perché se per esempio la funzione di "CheckCustom" fosse abbastanza invasiva in termini di tempo...eseguendala 2 volte rallenterebbe abbastanza la creazione della pagina. giusto?
22 messaggi dal 07 gennaio 2006
Da un punti di vista logico, sarebbe correto eseguire il controllo sulla validità solo nel PostBackEvent....facendone l'ovveride...cosi:

protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument)
    {
        base.RaisePostBackEvent(sourceControl, eventArgument);
        
        if (IsValid)
        {
            ...
        }
        else
        {
            ...
        }
        
    }


???
Lambe wrote:
Non c'è modo di evitare questo?!?!....perché se per esempio la funzione di "CheckCustom" fosse abbastanza invasiva in termini di tempo...eseguendala 2 volte rallenterebbe abbastanza la creazione della pagina. giusto?

ma dico... fare una semplice variabile boolean a livello di pagina e controllarla?

bool alreadyDone = false;

void validate()
{
if (!alreadyDone)
{
validateThis();
alreadyDone = true;
}
}

così anche se viene chiamata due volte, la validazione la fai una volta sola.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.