none
Usar javascript no Code Behind asp.net RRS feed

  • Pergunta

  • Bom dia
    Estou tentando rodar um javascript no code behind do controle Rating do AjaxToolKit com o evento Changed, mas sem sucesso. O Alert não aparece, segue o código:
     
    protected void Rating1_Changed(object sender, EventArgs e)   
                {
                      
                    var clientScript = Page.ClientScript;
                    clientScript.RegisterClientScriptBlock(this.GetType(), "AlertScript", "alert('ERROR')", true);
                      
                }
    
    //Gostaria de rodar esse script, mas nem consigo dar um simples alert:
    
                    Response.Write("<script language='javascript' type='text/javascript'>;");
                    Response.Write("var hf = document.getElementById(" + HiddenField1.ClientID + ");");
                    Response.Write("hf.value = document.getElementById('obs').innerHTML.toString();");
                    Response.Write("var valor = hf.value;");
                    Response.Write("alert(valor);");
                    Response.Write("</script>");
    
    Se alguém puder ajudar agradeço.

    Israel Homem
    quarta-feira, 21 de setembro de 2011 12:55

Respostas

  • Neste exemplo fiz tudo via código. Lembre se há casos e casos. Se tiver utilizando MasterPage o identificador do controle muda em tempo de execução. Se tiver utiilzando ajax o alert não vai funcionar desta forma... e por aí vai.

     

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title> 
    </head>
    <body>
        <form id="form1" runat="server">
        <div>    
            <asp:Button ID="btnPegarValor" runat="server" Text="Pegar valor do hidden" />
            </div>
        <br />
        <asp:HiddenField ID="hfTeste" runat="server" Value="Paulo_Cesar" />
        </form>
    </body>
    </html>
    
    


     

     

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Text;
    
    public partial class _Default : System.Web.UI.Page
    {      
        protected void Page_Load(object sender, EventArgs e)
        {
            StringBuilder funcaoJavaScript = new StringBuilder();    
            funcaoJavaScript.AppendLine("function ExibirValorHidden()");
            funcaoJavaScript.AppendLine("{");
            funcaoJavaScript.AppendLine("var hidden = document.getElementById('hfTeste');");
            funcaoJavaScript.AppendLine("alert(hidden.value);");
            funcaoJavaScript.AppendLine("}");
           
           Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "FuncaoQualquer", funcaoJavaScript.ToString(), true);
    
           btnPegarValor.Attributes.Add("onclick", "ExibirValorHidden();");
            
        }
    }
    
    


     

     


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    • Sugerido como Resposta Luiz Estevam quarta-feira, 5 de outubro de 2011 03:13
    • Marcado como Resposta Eder CostaModerator quinta-feira, 22 de dezembro de 2011 12:19
    quarta-feira, 21 de setembro de 2011 20:16

Todas as Respostas

  • Tem update panel?

    Se tiver você tem que fazer a chamada diferente.

    http://social.msdn.microsoft.com/Forums/pt-BR/aspnetpt/thread/ddeb6367-3129-4b88-a4af-e180b3451e04


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 21 de setembro de 2011 16:50
  • Opa Paulo

    Sim, estão em uma updatepanel tanto o hiddenfield quando o rating, só não entendi o tipo de chamada que tinha no link que você passou.


    Israel Homem
    quarta-feira, 21 de setembro de 2011 17:38
  • Olha a chamada que tem no link: ScriptManager.RegisterClientScriptBlock(page, page.GetType(), "Message", "<script type='text/javascript'> alert('Teste'); </script>", false);

     

    É um alert de teste sendo exibido em uma página que usa update panel. O ajax deve ser chamado diferente no codigo quando trabalhamos com ajax.


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 21 de setembro de 2011 18:08
  • Troquei como você disse mas continua na mesma.
    Israel Homem
    quarta-feira, 21 de setembro de 2011 19:34
  • Me diz extamente como está sua página. Posso fazer um teste. Ou então poste o html e o código...

    A maneira mais fácil de resolver isso é ter a função javascript no próprio html

    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 21 de setembro de 2011 19:46
  • Um exemplo  no próprio html:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
        <script type="text/javascript">
            function ExibirValorHidden()
            {
                var hidden = document.getElementById("hfTeste");  
                alert(hidden.value);                 
            }       
        </script>   
    </head>
    <body>
        <form id="form1" runat="server">
        <div>    
            <asp:Button ID="btnPegarValor" runat="server" OnClientClick="ExibirValorHidden();" Text="Pegar valor do hidden" />
            </div>
        <br />
        <asp:HiddenField ID="hfTeste" runat="server" Value="Paulo_Cesar" />
        </form>
    </body>
    </html>
    
    

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    
    public partial class _Default : System.Web.UI.Page
    {      
        protected void Page_Load(object sender, EventArgs e)
        {   
          
        }
    }
    
    


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 21 de setembro de 2011 19:57
  • Como Eu disse, pode manter a função javascript no html e apenas chamar via codigo. Ficaria assim:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
        <script type="text/javascript">
            function ExibirValorHidden()
            {
                var hidden = document.getElementById("hfTeste");  
                alert(hidden.value);                 
            }       
        </script>   
    </head>
    <body>
        <form id="form1" runat="server">
        <div>    
            <asp:Button ID="btnPegarValor" runat="server" Text="Pegar valor do hidden" />
            </div>
        <br />
        <asp:HiddenField ID="hfTeste" runat="server" Value="Paulo_Cesar" />
        </form>
    </body>
    </html>
    
    

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    
    public partial class _Default : System.Web.UI.Page
    {      
        protected void Page_Load(object sender, EventArgs e)
        {
            btnPegarValor.Attributes.Add("onclick", "ExibirValorHidden();");
        }
    }
    
    

    Faz a mesma coisa que o primeiro exeplo. Agora quer fazer tudo via codigo mesmo? Tbm é tranquilo. Eu só penso que fica esquisito.


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 21 de setembro de 2011 20:00
  • Neste exemplo fiz tudo via código. Lembre se há casos e casos. Se tiver utilizando MasterPage o identificador do controle muda em tempo de execução. Se tiver utiilzando ajax o alert não vai funcionar desta forma... e por aí vai.

     

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title> 
    </head>
    <body>
        <form id="form1" runat="server">
        <div>    
            <asp:Button ID="btnPegarValor" runat="server" Text="Pegar valor do hidden" />
            </div>
        <br />
        <asp:HiddenField ID="hfTeste" runat="server" Value="Paulo_Cesar" />
        </form>
    </body>
    </html>
    
    


     

     

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Text;
    
    public partial class _Default : System.Web.UI.Page
    {      
        protected void Page_Load(object sender, EventArgs e)
        {
            StringBuilder funcaoJavaScript = new StringBuilder();    
            funcaoJavaScript.AppendLine("function ExibirValorHidden()");
            funcaoJavaScript.AppendLine("{");
            funcaoJavaScript.AppendLine("var hidden = document.getElementById('hfTeste');");
            funcaoJavaScript.AppendLine("alert(hidden.value);");
            funcaoJavaScript.AppendLine("}");
           
           Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "FuncaoQualquer", funcaoJavaScript.ToString(), true);
    
           btnPegarValor.Attributes.Add("onclick", "ExibirValorHidden();");
            
        }
    }
    
    


     

     


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    • Sugerido como Resposta Luiz Estevam quarta-feira, 5 de outubro de 2011 03:13
    • Marcado como Resposta Eder CostaModerator quinta-feira, 22 de dezembro de 2011 12:19
    quarta-feira, 21 de setembro de 2011 20:16
  • Opa

    Até esta parte esta ok, eu havia feito assim mesmo, mas preciso fazer diferente. O meu hiddenField vai pegar o conteudo de uma div que troca valores e então meu HiddenField não tem value inicial porque vai ser alimentado pelo valor da div e isso será acionado pelo evento Changed do controle Rating ao invés de um botão e por isso não tem o onclick para testar como eu estava fazendo antes.

    O meu unico problema agora é simular o onclick para chamar a função que eu fazia antes.

    <script language="javascript" type="text/javascript">
    function botao() {
            document.getElementById('<%= HiddenField1.ClientID %>').value = document.getElementById('obs').innerHTML.toString();
            var valor = document.getElementById('<%= HiddenField1.ClientID %>').value;
            alert(valor);
            
    }
    </script>
    

    e no meu button:

    <asp:Button ID="Button1" runat="server" Text="Ok" OnClientClick="botao();"  onclick="Button1_Click"/>  
    


    e ja era, mas agora mudou e não sei como chamar o meu javascript?

    protected void Rating1_Changed(object sender, EventArgs e)   
                {
                    string script = "botao();";
                    
                    ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "idScript", script, false);
                   
                     string votado;
                     votado = HiddenField1.Value;
    
    }
    

    Funciona, mas só depois que o código do server esta concluido e ai meu votado fica assim. votado=""

    O alert aparece o valor do HiddenField


    Israel Homem
    quarta-feira, 21 de setembro de 2011 20:28
  • "Rodar o script e exibir o alert" já foi. Agora é com você....

    Lembre-se que javascript roda no client.


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 21 de setembro de 2011 20:38