none
Invalid postback or caollback argument sempre que executo um botão RRS feed

  • Pergunta

  • Olá pessoal

    tenho um grid que na sua primeira coluna fiz uma coluna de exclusão. Tem um imagebutton, que ao ser clicado dispara um javascript perguntando se o usuário quer mesmo excluir o registro. Se dou sim ou não, a página é enviada (algum tipo de post) e da um erro.

    Não consigo entender. Pode ser pq todos os botões da tela tem o mesmo nome? (se for imaginar que cada linha é criado o imagebutton e que o nome do botão seria igual pra todos...)

    Desde já, grato


    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    terça-feira, 21 de setembro de 2010 23:26

Respostas

  • Leandro, entendi sim...

    Parece que eu andei te falando besteira la no começo, primeiro o seu metodo de preencher o grid tem q estar assim:

    if (!isPostback) {
      this.UserGrid_Load(sender, e);
    }
    
    

    Ai deve parar de dar esse erro... E a chamada do seu evento deve ter um return antes, para cancelar o postback se o cara aperta em Cancel.

    Assim:

     OnClientClick='<%# string.Format("return ConfirmDelete(&apos;{0}&apos;)", DataBinder.Eval(Container.DataItem, "Login")) %>'
    
    

    Essas duas modificações devem resolver seu problema =/


    Ate mais

     

    quarta-feira, 22 de setembro de 2010 16:36

Todas as Respostas

  • não sei se pode ser isso, mas lá no javascript, ao invés de pegar o controle pelo name, pega pelo id, pq é único. getElementById()
    Att, Hugo S. Mendes
    quarta-feira, 22 de setembro de 2010 12:17
  • Hugo, não sei como fazer isso.

    Como tenho um GRID e dei bind em uma coleção, ele cria as linhas sozinho (e pra cada linha existe um imagebuton, então ele cria o imagebuton sozinho).

    Então não sei qual o ID de cada imagebutton

    não sei como faria isso


    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    quarta-feira, 22 de setembro de 2010 12:29
  • Bom dia Leandro!

    Fica meio dificil sem ver o código, mas ja tive um problema semelhante tempos atras...

    Lembro que no meu caso é pq apertava em um link button no grid, e no postback eu perdia o link, então ele tentava achar o cara que chamou evento e não achava. Resumindo, tinha resolvido isso chamando o meu metodo de preencher o grid no PageLoad, pq ai recriava meus itens no grid.

     

    Abraços!

     

    quarta-feira, 22 de setembro de 2010 12:47
  • André, bom dia.

    Já estou até irritado porque minhas outras páginas (que não tem grid) funcionam OK! Queria validar no Javascript e se retornar true executar o command normal (pra excluir o usuário da lista por exemplo).

    segue todo o fonte e espero que possa me ajudar.

    :)

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserReportPage.aspx.cs"
      Inherits="CMS.WebServer.Pages.Membership.UserReportPage" %>
    
    <!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></title>
      <script language="javascript">
        function ConfirmDelete(name) {
          if (confirm("Você quer mesmo excluir o usário " + name + "?") == true)
            return true;
          else
            return false;
        }
    
      </script>
    </head>
    <body>
      <asp:Table ID="tabelao" runat="server">
        <asp:TableHeaderRow ID="header">
          <asp:TableCell ID="cadastrarusuario"><A href=UserRegisterPage.aspx >cadastrar usuario</A></asp:TableCell>
          <asp:TableCell ID="consultarusuario"><A href=UserReportPage.aspx>consultar usuario</A></asp:TableCell>
        </asp:TableHeaderRow>
      </asp:Table>
      <form id="form1" runat="server">
      <asp:GridView ID="UserGrid" runat="server" AutoGenerateColumns="false" AlternatingRowStyle-BackColor="LightBlue"
        HeaderStyle-BackColor="LightGray" OnRowCommand="OnRowCommand">
        <Columns>
          <asp:TemplateField>
            <HeaderTemplate>
              <asp:ImageButton ID="hdrDelete" ImageUrl="~/Images/delete.png" AlternateText="Excluir todos"
                runat="server" />
            </HeaderTemplate>
            <ItemTemplate>
              <asp:ImageButton ID="btnDelete" ImageUrl="~/Images/delete.png" runat="server" CommandName="UserDelete"
                OnClientClick='<%# string.Format("ConfirmDelete(&apos;{0}&apos;)", DataBinder.Eval(Container.DataItem, "Login")) %>' />
            </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField>
            <HeaderTemplate>
              <asp:ImageButton ID="hdrEdit" ImageUrl="~/Images/pencil.png" runat="server" />
            </HeaderTemplate>
            <ItemTemplate>
              <%--<asp:ImageButton runat="server" AlternateText="Editar" ImageUrl="~/Images/pencil.png"
                CommandName="Edit" />--%>
            </ItemTemplate>
          </asp:TemplateField>
          <asp:BoundField DataField="Login" HeaderText="Login" HeaderStyle-HorizontalAlign="Left"
            ItemStyle-HorizontalAlign="Left" />
          <asp:BoundField DataField="Name" HeaderText="Nome" HeaderStyle-HorizontalAlign="Left"
            ItemStyle-HorizontalAlign="Left" />
          <asp:BoundField DataField="Email" HeaderText="Email" HeaderStyle-HorizontalAlign="Left"
            ItemStyle-HorizontalAlign="Left" />
          <asp:BoundField DataField="Address" HeaderText="Endereço" HeaderStyle-HorizontalAlign="Left"
            ItemStyle-HorizontalAlign="Left" />
        </Columns>
      </asp:GridView>
      </form>
    </body>
    </html>
    
    

     e do code behind

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using CMS.Entities.Accounts;
    using CMS.BLL.Accounts;
    
    namespace CMS.WebServer.Pages.Membership
    {
    
      /// <summary>
      /// Página que lista os usuários cadastrados
      /// </summary>
      public partial class UserReportPage : System.Web.UI.Page
      {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
          this.UserGrid_Load(sender, e);
        }
    
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UserGrid_Load(object sender, EventArgs e)
        {
          this.UserGrid.DataSource = new UserBLL().Load();
          this.UserGrid.DataBind();
        }
    
    
        protected void OnRowCommand(object sender, GridViewCommandEventArgs e)
        {
    
        }
    
    
      }
    }
    

    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    quarta-feira, 22 de setembro de 2010 12:58
  • Curioso, bom parece que não era o que eu achei que era...

    Olha, no asp.net 2.0 eles adicionaram um feature chamada EventValidation, que se não me engano é para validar se os postback, as requisições, eram vindas de controles validos, esperados pelo .NET. Acho que era para evitar scripts Incjections ( um tipo de ataque usando alguns scripts ) .. bom, eu sei que vc pode desabilitar isso colocando EnableEventValidation="false" dentro de : <%@ Page   (no topo do aspx ). Mas não eh aconselhado...

    Tem um post muito bom no blog da msdn que talvez te ajude:

    http://blogs.msdn.com/b/amitsh/archive/2007/07/31/why-i-get-invalid-postback-or-callback-argument-errors.aspx

     

    Abraços,

    quarta-feira, 22 de setembro de 2010 13:39
  • VocÊ entendeu o que eu gostaria de fazer?

    tem alguma idéioa melhor?


    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    quarta-feira, 22 de setembro de 2010 14:51
  • tenta colocando return false nos dois.

    vc daria apenas o if(confirm("asdasdasad?")==true) {//chama metodo de exclusao}return false;

     

    é claro que o de cima é um pseudo-código.

     

     


    Att, Hugo S. Mendes
    quarta-feira, 22 de setembro de 2010 16:34
  • Leandro, entendi sim...

    Parece que eu andei te falando besteira la no começo, primeiro o seu metodo de preencher o grid tem q estar assim:

    if (!isPostback) {
      this.UserGrid_Load(sender, e);
    }
    
    

    Ai deve parar de dar esse erro... E a chamada do seu evento deve ter um return antes, para cancelar o postback se o cara aperta em Cancel.

    Assim:

     OnClientClick='<%# string.Format("return ConfirmDelete(&apos;{0}&apos;)", DataBinder.Eval(Container.DataItem, "Login")) %>'
    
    

    Essas duas modificações devem resolver seu problema =/


    Ate mais

     

    quarta-feira, 22 de setembro de 2010 16:36
  • Nossa, muito obrigado!
    Você não tem nossão da ajuda que deu André!
    :)

    Abraços


    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    quarta-feira, 22 de setembro de 2010 18:13