none
Chamar função javascript pelo C# RRS feed

  • Pergunta

  • Olá,

    Estou tentando emitir um alerta para usuário, no momento que uma transação de Insert não satisfaz uma regra de negócio.

    Só que eu queria que o método ObjectDataSourceMassiva_Inserted de meu data source pudesse ser capaz de executar uma função javascript.

    Encontrei que posso registrar scripts desta forma:

    // Define the name and type of the client scripts on the page.
        String csname1 = "PopupScript";
        Type cstype = this.GetType();
    
    // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = Page.ClientScript;
        if (!cs.IsStartupScriptRegistered(cstype, csname1))
        {
            StringBuilder cstext1 = new StringBuilder();
            cstext1.Append("<script type=text/javascript>");
            cstext1.Append("    if ($(\"input[id$='isRegZero']\").val() == \"1\") {");
                    cstext1.Append("        dialogoMensagem('" + Resources.Validacao.regZero + "');");
                    cstext1.Append("        $(\"input[id$='isRegZero']\").val(\"0\");");
            cstext1.Append("    }");
            cstext1.Append("</script>");
    
            cs.RegisterStartupScript(cstype, csname1, cstext1.ToString());
    }

    (usei valores inputs desnecessários, resultados de vários testes de implementação)

    Mas notei que isto só funciona realmente no Page_Load, mas no retorno na hora que deveria executar a mensagem, não há page load.

    Alguma ideia de como fazer?

    Desde já Obrigado
    Att,
    Gabriel Braga


    Obrigado, Att, Gabriel Braga Graduando em Sistemas de Informação PUC-Rio

    quarta-feira, 10 de abril de 2013 20:22

Respostas

Todas as Respostas

  • quinta-feira, 11 de abril de 2013 01:17
  •  Ver se esse link ajuda...  Executar função Javascript dentro do código...

    Não sei se entendi direito, ou se você não entendeu direito.

    O problema é que eu quero ativar um javascript pelo meu método de retorno do ObjectDataSource,
    o método "Inserted"...

    Mas eu só consigo executar desta forma quando faço isto no método page load, que executa antes da consulta.

    Utilizando Response.Write eu substituo a resposta original e dá erro de javascript, (erro de Parser).
    Mais alguma sugestão?

    Obrigado,


    Obrigado, Att, Gabriel Braga Graduando em Sistemas de Informação PUC-Rio

    segunda-feira, 15 de abril de 2013 16:32
  • Não funciona necessariamente no Page_Load, dá algum erro de javascript? Qual o conteúdo do seu método ObjectDataSourceMassiva_Inserted?
    segunda-feira, 15 de abril de 2013 20:17
  • Não funciona necessariamente no Page_Load, dá algum erro de javascript? Qual o conteúdo do seu método ObjectDataSourceMassiva_Inserted?
    /* INSERT */
    protected void ObjectDataSourceMassiva_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
    {
        statusInclusao = (String)e.ReturnValue;
        if (statusInclusao == "FAIL")
        {
            isRegZero.Value = "1";
            // Define the name and type of the client scripts on the page.
            String csname1 = "PopupScript";
            Type cstype = this.GetType();
    
            // Get a ClientScriptManager reference from the Page class.
            ClientScriptManager cs = Page.ClientScript;
            if (!cs.IsStartupScriptRegistered(cstype, csname1))
            {
                StringBuilder cstext1 = new StringBuilder();
                cstext1.Append("<script type=text/javascript>");
                cstext1.Append("    if ($(\"input[id$='isRegZero']\").val() == \"1\") {");
                cstext1.Append("        dialogoMensagem('" + Resources.Validacao.regZero + "');");
                cstext1.Append("        $(\"input[id$='isRegZero']\").val(\"0\");");
                cstext1.Append("    }");
                cstext1.Append("</script>");
    
                cs.RegisterStartupScript(cstype, csname1, cstext1.ToString());
            }
        }
    }
    Não dá erro de javascript, mas não executa, apesar de entrar normalmente no trecho.


    Obrigado, Att, Gabriel Braga Graduando em Sistemas de Informação PUC-Rio


    terça-feira, 16 de abril de 2013 13:37
  • Em vez de chamar dentro do código, você não pode realizar esta chamada através do ajax em um handler?

    Assim você pode tratar o retorno sem realizar o post back, não sei se você possui algo que deva ser executado após esta confirmação.

    quarta-feira, 17 de abril de 2013 18:03
  • Em vez de chamar dentro do código, você não pode realizar esta chamada através do ajax em um handler?

    Assim você pode tratar o retorno sem realizar o post back, não sei se você possui algo que deva ser executado após esta confirmação.

    Na verdade só obtenho esta informação em meio ao processo de inserção. Por isso gostaria de utilizar o método ObjectDataSourceMassiva_Inserted para poder conseguir executar algum javascript para interação com o usuário.

    No entanto, pode me dar um exemplo claro? Os exemplos que vi em ajax para ASP.NET não se encaixavam muito bem nesta aplicação.



    Obrigado, Att, Gabriel Braga Graduando em Sistemas de Informação PUC-Rio

    segunda-feira, 22 de abril de 2013 16:12