26

Apr

getPostBackControl

Ciao a tutti

In molti scenari di sviluppo ASP.NET capita di usare un controllo come gridview o listview in cui mettere dei template con dentro dei LinkButton:

[code language="html"]

[/code]

Il post back viene invocato ovviamente sulla pagina di arrivo, senza però sapere quale dei “link1” generati per ogni riga della griglia sia davvero quello giusto. Come fare? Niente di più semplice ;)

[code language="csharp;toolbar:false"]

Control postBackControl = PreviousPage.FindControl(Request.Form.Get("__EVENTTARGET")); c#

[/code]

[code language="vb"]

dim postBackControl = PreviousPage.FindControl(Request.Form.Get("__EVENTTARGET")) VB

[/code]

unico inconveniente: i pulsanti non funzionano perché non usano l’eventtarget, ma poiché in Request c’è eventualmente il solo pulsante che ha fatto Postback, allora basta cercarlo per nome. Quindi potremmo fare un metodino così:

[code language="csharp"]

Control getPostBackControl()
{
    string eventTarget = Request.Form.Get("__EVENTTARGET");
    if (!string.IsNullOrEmpty(eventTarget))
        return PreviousPage.FindControl(eventTarget);
    else
    {
        foreach (string name in Request.Params)
        {
            Control c = PreviousPage.FindControl(name);
            if (c is Button)
                return c;
        }
        return null;
    }
}

[/code]

Buon divertimento ;)

by Antonio Esposito on 4/26/2010