[ASP.NET] Effettuare un __doPostBack per passare un valore personalizzato

#########
Modificato
Nei feedback trovate il commento di Andrea Boschin che spiega la soluzione "corretta" al problema. Lascio comunque il testo originale coi miei passaggi, che mi sono stati comunque utili per conoscere meglio il PostBack e per capire meglio il funzionamento di CommandName e CommandArgument suggeriti da Andrea.
#########

Ieri mi sono trovato nella condizione di dover eseguire una singola operazione al click effettuato su un semplice link (ma poteva essere qualsiasi altro controllo) contenuto in un DataList associato a dati di uno UserControl.

Non volevo perdere il ViewState degli altri UserControl e quindi anche della pagina stessa e la soluzione che (per ora) ho adottato è stata di fare un postback "manuale" sulla pagina passando un valore personalizzato.

Come si capisce credo si tratti di un argomento di livello sicuramente "beginner" su ASP.NET, ma purtoppo solo da poco tempo sto iniziando ad utilizzarlo "realmente" (ed infatti non vedo l'ora di fare il corso con Andrea per chiarirmi giusto qualche miliardata di dubbi ).

Ho provato a cercare qualcosa, visto che su UGIdotNET o comunque su Google qualcosa di sicuro c'è, ma dopo aver cercato invano (il problema è sempre trovare le giuste key di ricerca...) ho trovato il metodo alla vecchia maniera: curiosando nel codice!

Comunque a vostro "rischio e pericolo" (di leggere vaccate ) posto qualche riga nel caso qualcuno volesse riutilizzare o anche solo criticare questa procedura.

Nel caso qualcuno non lo sapesse ASP.NET analizza i due campi nascosti __EVENTTARGET ed __EVENTARGUMENT per capire chi ha generato il postback e che valore (facoltativo) ha passato.

La sntassi usata più o meno da .NET per "riconoscere" il controllo che ha richiesto il postback è:

MyLinkButton nel caso di un LinkButton, oppure

MyUserControl$MyLinkButton nel caso di un LinkButton contenuto in uno UserControl, oppure

MyParentUserControl$MyChildUserControl$MyLinkButton nel caso di un LinkButton contenuto in uno UserControl, a sua volta contenuto in un altro UserControl (si, si... le matrioske... )

In questo caso invece di trovarsi il suo nome "in codice" del controllo si troverà un "nostro" codice che ovviamente non saprà riconoscere. Sarà compito nostro andare a gestire quel postback.

In pratica il codice da includere nella pagina aspx (o ascx) sarà il seguente:

<a href='<%# String.Format("javascript:__doPostBack(""MyFunctionKey"",""{0}"")", Container.DataItem.ExampleID) %>'>Fa quì cos</a>

Mentre nel code behind dovremmo gestire il postback nell'evento Load del form:

If Me.IsPostBack Then
  
'Controllo se è il postback che ho generato io da quel controllo
  
If Request.Form("__EVENTTARGET") = "MyFunctionKey" Then
      Dim
myValue as String = Request.Form("__EVENTARGUMENT")
     
MyFunction(myValue)
  
End If
End
If

Print | posted @ mercoledì 6 aprile 2005 15:27

Comments on this entry:

Gravatar # re: [ASP.NET] Effettuare un __doPostBack per passare un valore personalizzato
by Mario Duzioni at 06/04/2005 21:23

Grazie Andrea, ho appena letto il tuo commento. Approfondisco il tutto ed eventualmente correggo quanto scritto sul post (per non lasciare informazioni scorrette in giro...).

Ciao, a domani...
Gravatar # re: [ASP.NET] Effettuare un __doPostBack per passare un valore personalizzato
by Mario Duzioni at 06/04/2005 23:19

Ok, credo di aver capito come funziona il tutto.

Come scrivevo, la procedura che avevo applicato "(per ora)" era sicuramente da "walk around"; adesso grazie alla tua nota la posso tranquillamente definire "sbagliata"!

Ribadisco anche che: "purtoppo solo da poco tempo sto iniziando ad utilizzarlo realmente"... Non è mai la stessa cosa fare progettini di prova e mettere in piedi soluzioni reali! SOB...

Meno male che il corso capita proprio adesso!

Grazie, ciao!
Comments have been closed on this topic.