none
Image button RRS feed

  • Pergunta

  • Boa noite,

    tenho uma coluna de imagebutons num listview....gostaria de saber como chamo o codebehind quando clicar no imagebutton

    Obrigado

    sexta-feira, 8 de março de 2013 21:22

Respostas

  • Você pode usar o ItemCommand, veja o exemplo abaixo.

    <asp:ListView ID="lstProdutos" OnItemCommand="ItemCommand" runat="server">
    	<ItemTemplate>
    	<div>
    		<strong><%# Eval("value") %></strong>
    		<asp:ImageButton ID="lnkComprar" runat="server" Text="Comprar"
    			CommandArgument='<%# Eval("key") %>' CommandName="lnkComprar" />
    	</div>
    	</ItemTemplate>
    </asp:ListView>
    

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Dictionary<int, string> dicProdutos = new Dictionary<int, string>();
                dicProdutos.Add(1, "camisa");
                dicProdutos.Add(2, "calça");
                dicProdutos.Add(3, "sapato");
                lstProdutos.DataSource = dicProdutos;
                lstProdutos.DataBind();
            }
    
        }
    
        protected void ItemCommand(Object Sender, ListViewCommandEventArgs e)
        {
            if (((ImageButton)e.CommandSource).CommandName == "lnkComprar")
                Response.Write(((ImageButton)e.CommandSource).CommandArgument);
        }

    Aqui tem um artigo similar, mas vai te auxiliar, foi dai que tirei oexemplo.

    http://cbsa.com.br/post/linkbutton-dentro-de-um-repeater-pegando-o-linkbutton-clicado-aspnet---c.aspx

    sábado, 9 de março de 2013 18:37
  • Achei um artigo que fala sobre este problema

    “System.ArgumentException”: Argumento de postback ou de retorno de chamada inválido. A validação do evento é habilitada com o uso de <pages enableEventValidation=”true”/> na configuração ou <%@ Page EnableEventValidation=”true” %>  em uma página. Por motivos de segurança, esse recurso verifica se os argumentos para eventos de postback ou de retorno de chamada se originam no controle do servidor que originalmente os processou. Se os dados forem válidos e esperados, use o método ClientScriptManager.RegisterForEventValidation para registrar os dados de postback ou de retorno de chamada para validação.

    Mais detalhes: http://ericlemes.com/2009/01/12/dotnet-controlesdinamicos/

    • Marcado como Resposta Eduardo MF segunda-feira, 11 de março de 2013 18:33
    segunda-feira, 11 de março de 2013 17:04

Todas as Respostas

  • Você pode usar o ItemCommand, veja o exemplo abaixo.

    <asp:ListView ID="lstProdutos" OnItemCommand="ItemCommand" runat="server">
    	<ItemTemplate>
    	<div>
    		<strong><%# Eval("value") %></strong>
    		<asp:ImageButton ID="lnkComprar" runat="server" Text="Comprar"
    			CommandArgument='<%# Eval("key") %>' CommandName="lnkComprar" />
    	</div>
    	</ItemTemplate>
    </asp:ListView>
    

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Dictionary<int, string> dicProdutos = new Dictionary<int, string>();
                dicProdutos.Add(1, "camisa");
                dicProdutos.Add(2, "calça");
                dicProdutos.Add(3, "sapato");
                lstProdutos.DataSource = dicProdutos;
                lstProdutos.DataBind();
            }
    
        }
    
        protected void ItemCommand(Object Sender, ListViewCommandEventArgs e)
        {
            if (((ImageButton)e.CommandSource).CommandName == "lnkComprar")
                Response.Write(((ImageButton)e.CommandSource).CommandArgument);
        }

    Aqui tem um artigo similar, mas vai te auxiliar, foi dai que tirei oexemplo.

    http://cbsa.com.br/post/linkbutton-dentro-de-um-repeater-pegando-o-linkbutton-clicado-aspnet---c.aspx

    sábado, 9 de março de 2013 18:37
  • Cesar, nao funcionou....quando clico no imageButton, ocorre a seguinte mensagem...

    Argumento de postback ou de retorno de chamada inválido. A validação do evento é habilitada com o uso de <pages enableEventValidation="true"/> na configuração ou <%@ Page EnableEventValidation="true" %> em uma página. Por motivos de segurança, esse recurso verifica se os argumentos para eventos de postback ou de retorno de chamada se originam no controle do servidor que originalmente os processou. Se os dados forem válidos e esperados, use o método ClientScriptManager.RegisterForEventValidation para registrar os dados de postback ou de retorno de chamada para validação.

    como posso resolver isto?

    domingo, 10 de março de 2013 14:59
  • Para resolver isto basta seguir as instruções do link abaixo que vai funcionar.

    http://cbsa.com.br/post/aspnet---um-valor-possivelmente-perigoso-requestform-foi-detectado-no-cliente.aspx

    segunda-feira, 11 de março de 2013 15:06
  • não resolveu...coloquei tanto na pagina como no web config....e nao funcionou....existe alguma outra forma de fazer isto?

    para que é utilizado o commandArgument?

    segunda-feira, 11 de março de 2013 15:42
  • Cara,

    CommandArgument é uma propriedade disponível no seu ImageButton. No caso do exemplo do Cesar, ele passa como valor para o CommandArgument, um valor retornado do banco onde "Key" é a sua coluna chave da tabela.

    Se o seu retorno do banco trouxer uma coluna CODIGO por exemplo para identificar cada registro então deve-se informar essa coluna CODIGO para o funcionamento:

    CommandArgument='<%# Eval("CODIGO") %>' 

    No caso ai o Cesar utilizou o Eval para fazer isso, porém existe o Bind com a mesma estrutura do Eval só alterando o nome:

    CommandArgument='<%# Bind("CODIGO") %>' 


    Atenciosamente, Samuel dos Anjos

    segunda-feira, 11 de março de 2013 16:49
  • testei com e sem o commandArgument tambem nao consegui fazer funcionar...

    o que posso fazer para corrigir o erro que postei acima...

    Obrigado

    segunda-feira, 11 de março de 2013 16:57
  • Achei um artigo que fala sobre este problema

    “System.ArgumentException”: Argumento de postback ou de retorno de chamada inválido. A validação do evento é habilitada com o uso de <pages enableEventValidation=”true”/> na configuração ou <%@ Page EnableEventValidation=”true” %>  em uma página. Por motivos de segurança, esse recurso verifica se os argumentos para eventos de postback ou de retorno de chamada se originam no controle do servidor que originalmente os processou. Se os dados forem válidos e esperados, use o método ClientScriptManager.RegisterForEventValidation para registrar os dados de postback ou de retorno de chamada para validação.

    Mais detalhes: http://ericlemes.com/2009/01/12/dotnet-controlesdinamicos/

    • Marcado como Resposta Eduardo MF segunda-feira, 11 de março de 2013 18:33
    segunda-feira, 11 de março de 2013 17:04
  • cara q mer.....rs era por causa do post back mesmo

    Valeu ai pessoal

    segunda-feira, 11 de março de 2013 18:33