Uma das coisas mais chatas no ciclo de eventos, é o evento de click de um botão acontecer só depois do OnLoad. Então que fazer quando no OnLoad precisamos de saber se um botão foi pressionado? O truque para conseguir esta informação no OnLoad é ter um hidden field que é afectado pelo evento de client click do botão.
Código no ASPX:
Código no code behind:
Código de Javascript:
Código no ASPX:
<asp:button id="filter" onclientclick="JSFilter()" onclick="Filter" runat="server">
Código no code behind:
protected override void OnInit(EventArgs e) { Page.ClientScript.RegisterHiddenField("filterChange", ""); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); string arg = HttpContext.Current.Request.Form["filterChange"]; if (arg == "1") { //A lógica que se quiser se o botão foi pressionado } }
Código de Javascript:
function JSFilter(){ var hidden = $('filterChange'); hidden.value = 1; }Quando o botão é pressionado o javascript é executado colocando o valor do hidden field igual a 1 (estou a usar mootools no javascript, mas poderia usar um get por id, sem usar o mootools). Quando entro no evento OnLoad verifico se o valor do hidden field é 1, se for é porque o botão foi pressionado.
Se o botão for clicado, no postback o HttpContext.Current.Request.Form["filter"] contém o valor Text do botão.
ResponderEliminarDesta forma escusas de fazer o hack em javascript :)
Boa, pensava que ele vinha sempre, é um pequeno detalhe mas importante.
ResponderEliminarObrigado :)