ScriptManager.RegisterClientScriptBlock

100 views
Skip to first unread message

Diogo A. Miranda

unread,
Nov 12, 2009, 3:01:05 PM11/12/09
to DotNet Brasil
Olá Pessoal,

Sei que este assunto já foi discutido em outras threads, mas a dúvida
ainda persiste. Bom, é o seguinte, tenho em uma página, um
usercontrol. Dentro desse usercontrol existe um botão de onde disparo
uma função javascript que está em um arquivo .js . Para executar essa
função JS de dentro do c#, executei o método usando o evento que está
na página como mostra abaixo:

protected override void OnInit(EventArgs e)
{
((LinkButton)ucSubconjunto.FindControl("btnNovo")).Click
+= new EventHandler(PainelSubconjunto);
base.OnInit(e);
}


protected void PainelSubconjunto(object sender, EventArgs e)
{
ScriptManager.RegisterClientScriptBlock(this, GetType(),
"",
"javascript:HabilitaPainel(false);return false;",
true);
}

Quando eu executo esse método não acontece nada. Bom, fiz um teste
nesse mesmo método apenas com um alert('Teste'); e assim funcionou sem
problemas nenhum.

Outra coisa, coloquei tanto no início quanto no fim da página, o
caminho do arquivo .js, e não aconteceu nada.

Além dessas tentativas, alguém ainda tem outra idéia de como posso
resolver isso?

Desde já agradeço!!!

Abs.,

Diogo

Vinicius Gama

unread,
Nov 12, 2009, 7:29:25 PM11/12/09
to DotNet Brasil
Cara, pelo visto seu javascript tem algo errado, alem do mais, acho q
nao e necessario colocar aquele "javascrip:...". Pq vc nao coloca tua
function pra fazer o retorno? ai vc colocar assim a chamada do
js :return HabilitaPainel(false).

Diogo Miranda

unread,
Nov 13, 2009, 7:22:59 AM11/13/09
to dotn...@googlegroups.com
Olá Vinicius,
 
Depois de muito apanhar com chamadas de funções JS via ScriptManager.RegisterClientScriptBlock no code-behind, aprendi que o melhor é prevenir do que remediar. A questão de utilizar o "javascript: " para chamar a função JS é simplesmente para chamar de fato a func. Abaixo disponilizei a func. para vocês analisarem:
 
 
function HabilitaPainel(bHabilitar) {
    var listTDs = new Array('ucSubconjunto_tdDisp', 'ucSubconjunto_tdEspelho', 'ucSubconjunto_tdGridLeg',
    'ucSubconjunto_tdGridSub', 'ucSubconjunto_tdImg', 'ucSubconjunto_tdImgEsquerda', 'ucSubconjunto_tdLeg',
    'ucSubconjunto_tdMenu', 'ucSubconjunto_tdResSub', 'ucSubconjunto_tdResTotalSub');
    for (var i = 0; i < listTDs.length; i++) {
        var o = document.getElementById(listTDs[i]);
        if (o != null) {
            if (!bHabilitar) {
                o.style.display = 'none';
                if (listTDs[i] == 'ucSubconjunto_tdDisp') {
                    o.style.width = 760 + 'px';
                }
                if (listTDs[i] == 'ucSubconjunto_tdEspelho') {
                    o.style.width = 860 + 'px';
                }
            }
            else {
                o.style.display = 'block';
                if (listTDs[i] == 'ucSubconjunto_tdDisp') {
                    o.style.width = 358 + 'px';
                }
                if (listTDs[i] == 'ucSubconjunto_tdEspelho') {
                    o.style.width = 508 + 'px';
                }
            }
        }
    }
}
 
 
Desde já agradeço pela ajuda!
 
t++;

Vinicius Gama

unread,
Nov 13, 2009, 8:41:22 AM11/13/09
to DotNet Brasil
Olá Diogo,

Os ids dos controles que voce passou no array, você tem certeza que
eles existem? Minha sugestão é você passar eles como parametro,
buscando o clientID de cada controle, é mais garantido.
Outra coisa, não seria mais pratico ao inves de adicionar um handler
pro button vc adicionasse diretamente o evento js? A menos que tenho
outro motivo para fazer desse modo.

protected override void OnInit(EventArgs e)
{
((LinkButton)ucSubconjunto.FindControl
("btnNovo")).Attributes.Add("onClick","return HabilitaPainel(false)");
base.OnInit(e);

Diogo Miranda

unread,
Nov 13, 2009, 11:10:24 AM11/13/09
to dotn...@googlegroups.com
É que dessa forma você apenas atribui o evento onclick da func. JS, já da outra forma, você dispara o evento do método que precisar ser executado.
 
Abs.

2009/11/13 Vinicius Gama <viniciu...@gmail.com>
Analista e Desenvolvedor .NET
GIS Solutions
(11) 6325-6484

Vinicius Gama

unread,
Nov 13, 2009, 11:52:24 AM11/13/09
to DotNet Brasil
Entendi, tem mais codigo para ser excutado no click do botao certo? E
ai, conseguiu resolver o problema?

On 13 nov, 14:10, Diogo Miranda <dmst...@gmail.com> wrote:
> É que dessa forma você apenas atribui o evento onclick da func. JS, já da
> outra forma, você dispara o evento do método que precisar ser executado.
>
> Abs.
>
> 2009/11/13 Vinicius Gama <vinicius.sg...@gmail.com>
> --
> Diogo A. Miranda

Diogo Miranda

unread,
Nov 13, 2009, 12:04:02 PM11/13/09
to dotn...@googlegroups.com
Estou pensando aqui...kkk... abracao Quando consegui posto para tudo mundo ver.

2009/11/13 Vinicius Gama <viniciu...@gmail.com>
Reply all
Reply to author
Forward
0 new messages