Usuário com melhor resposta
Invalid postback or caollback argument sempre que executo um botão

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)
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('{0}')", DataBinder.Eval(Container.DataItem, "Login")) %>'
Essas duas modificações devem resolver seu problema =/
Ate mais
- Marcado como Resposta LeandrodeMelloFagundes quarta-feira, 22 de setembro de 2010 18:13
Todas as Respostas
-
-
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) -
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!
-
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('{0}')", 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) -
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,
-
-
-
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('{0}')", DataBinder.Eval(Container.DataItem, "Login")) %>'
Essas duas modificações devem resolver seu problema =/
Ate mais
- Marcado como Resposta LeandrodeMelloFagundes quarta-feira, 22 de setembro de 2010 18:13
-