Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cazanova

[Resolvido] problemas com eventos em uma paginação.

Recommended Posts

Consegui finalmente fazer minha paginação porém ao clicar nos números simplismente não pagina, ao colocar o binder() no Page_Load sem o !Page.IsPostBack e clicar em um link que nao seja os botões da paginação da o seguinde erro:

 

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.

Não sei onde colocar o binder, pois se coloco dentro do pageLoad funciona a paginação mas os links do datagrid não, e se coloco fora a paginação não funciona mas os links sim.

 

List.ASPX

<asp:GridView 
	CssClass="table-list" 
	ID="gvSession" 
	runat="server" 
	AllowPaging="true" 
	AutoGenerateColumns="false" 
	EnableViewState="true" 
	PageSize="2" 
	AlternatingRowStyle-CssClass="dark" 
	OnDataBound="gvSession_OnDataBound" 
	OnRowDataBound="gvSession_OnRowDataBound" 
	OnPageIndexChanged="gvSession_OnPageIndexChanged" 
	EmptyDataText="Nenhuma sessão criada."  
	OnRowCommand="List_Commands">

	<Columns>
		<asp:TemplateField> 
			<HeaderTemplate>
				<input type="checkbox" />
			</HeaderTemplate>
			<ItemTemplate>
				<asp:CheckBox ID="chbSelect" runat="server" />
			</ItemTemplate>
		</asp:TemplateField>
		<asp:TemplateField HeaderText="Nome da Sessão">
			<ItemTemplate>
				<asp:Label ID="lblSessionName" runat="server"></asp:Label>
			</ItemTemplate>
		</asp:TemplateField>
		<asp:TemplateField HeaderText="Sub-Sessões">
			<ItemTemplate>
				<asp:PlaceHolder ID="phSubSessions" runat="server"></asp:PlaceHolder>
				<asp:Label ID="lblSubSessions" runat="server"></asp:Label>
			</ItemTemplate>
		</asp:TemplateField>
		<asp:TemplateField HeaderText="Data de Criação">
			<ItemTemplate>
				<asp:Label ID="lblDateRegister" runat="server"></asp:Label>
			</ItemTemplate>
		</asp:TemplateField>
		 <asp:TemplateField HeaderText="Tipo de Sessão">
			<ItemTemplate>
				<asp:Label ID="lblSessionType" runat="server"></asp:Label>
			</ItemTemplate>
		</asp:TemplateField>
		<asp:TemplateField HeaderStyle-Width="120" HeaderText="Ações">
			<ItemTemplate>
				<asp:ImageButton ID="ibView"  CommandName="CmsView" ImageUrl="../../app_image/icon/btn-view.png" runat="server" />
				<asp:ImageButton ID="ibEdit" CommandName="CmsEdit" ImageUrl="../../app_image/icon/btn-edit.png" runat="server" />
				<asp:ImageButton ID="ibDelete" OnClientClick="java script: return confirm('Tem certeza que deseja deletar este item?');" CommandName="CmsDelete" ImageUrl="../../app_image/icon/btn-delete.png" runat="server" />
				<asp:ImageButton ID="ibApprove" OnCommand="List_Commands" CommandName="Approve" ImageUrl="../../app_image/icon/btn-approve.png" runat="server" />									
			</ItemTemplate>
		</asp:TemplateField>
	</Columns>
	<PagerTemplate>
		<div class="pagination">
			<div class="float-left">
				<asp:ImageButton ID="deleteAll" ImageUrl="../../app_image/btn/btn-excluir-selecionados.png" runat="server" />
				<asp:ImageButton ID="approveAll" ImageUrl="../../app_image/btn/btn-aprovar.png" runat="server" />
			</div>
			<div class="float-right">
				<asp:Panel runat="server" ID="paginationNavigation"></asp:Panel>
			</div>
		</div>
	</PagerTemplate>
</asp:GridView>

List.ASPX.CS

#region properties
	private int _SessionId;
	private CmsAction _Action;
	public int SessionId
	{
		get
		{
			return _SessionId;
		}
		set
		{
			_SessionId = value;
		}
	}

	public CmsAction Action
	{
		get
		{
			return _Action;
		}
		set
		{
			_Action = value;
		}
	}
#endregion


#region Methods

	protected void binder()
	{
		gvSession.DataSource = CmsSession.Select(LoggedUser.Client);
		gvSession.DataBind();
	}
	protected void Page_Load(object sender, EventArgs e)
	{
		VerifyLogin();
		if (!Page.IsPostBack)
		{
			binder();
		}
		
	}
	protected void gvSession_OnRowDataBound(object sender, GridViewRowEventArgs e)
	{
		if (e.Row.RowType == DataControlRowType.DataRow)
		{
			DataRowView drv = e.Row.DataItem as DataRowView;
			Label lblSessionName = e.Row.FindControl("lblSessionName") as Label;
			Label lblSubSessions = e.Row.FindControl("lblSubSessions") as Label;
			Label lblDateRegister = e.Row.FindControl("lblDateRegister") as Label;
			Label lblSessionType = e.Row.FindControl("lblSessionType") as Label;

			string idArgument = drv["id"].ToString();

			if (lblSessionName != null)
			{
				lblSessionName.Text = drv["name"].ToString();
			}

			if (lblSubSessions != null)
			{
				PlaceHolder phSubSessions = e.Row.FindControl("phSubSessions") as PlaceHolder;
				int numSubSessions = CmsSession.GetNumberSubSessions(base.LoggedUser.Client, Convert.ToInt32(drv["id"]));
				lblSubSessions.Text = numSubSessions.ToString();
				if (numSubSessions > 0)
				{
					LinkButton lbViewSubSessions = new LinkButton();
					lbViewSubSessions.CommandArgument = idArgument;
					lbViewSubSessions.CommandName = "ViewSubSessions";
					lbViewSubSessions.Command += new CommandEventHandler(this.List_Commands);
					phSubSessions.Controls.Add(lbViewSubSessions);
				}
			}
			
			if (lblDateRegister != null)
			{
				DateTime dateRegister = Convert.ToDateTime(drv["date_register"].ToString());
				lblDateRegister.Text = dateRegister.ToString("d");
			}
			if (lblSessionType != null)
			{
				int aux = Convert.ToInt32(drv["id_sessionType"].ToString());
				CmsSessionType sessionType = (CmsSessionType)aux;
				lblSessionType.Text = Enum.GetName(typeof(CmsSessionType), sessionType);
			}
			ImageButton ibView = e.Row.FindControl("ibView") as ImageButton;
			ImageButton ibEdit = e.Row.FindControl("ibEdit") as ImageButton;
			ImageButton ibDelete = e.Row.FindControl("ibDelete") as ImageButton;
			ImageButton ibApprove = e.Row.FindControl("ibApprove") as ImageButton;
			
			ibView.CommandArgument = idArgument;
			ibEdit.CommandArgument = idArgument;
			ibDelete.CommandArgument = idArgument;
			ibApprove.CommandArgument = idArgument;
			if (Convert.ToInt16(drv["status"]) == 0)
			{
				ibApprove.ImageUrl = "~/app_image/icon/btn-approve.png";
				ibApprove.CommandName = "Approve";
			}
			else
			{
				ibApprove.ImageUrl = "~/app_image/icon/btn-reprove.png";
				ibApprove.CommandName = "Reprove";
			}
		}

	}
	protected void buildPagination(GridViewRow e)
	{
		System.Web.UI.WebControls.Panel pnl = (System.Web.UI.WebControls.Panel)e.FindControl("paginationNavigation");
		if (gvSession.PageIndex > 0)
		{
			pnl.Controls.Add(new LiteralControl("<div class='float-left'>"));
			ImageButton btnPage = new ImageButton();
			btnPage.ImageUrl = "~/app_image/btn/btn-voltar.png";
			btnPage.ToolTip = "Página Anterior";
			btnPage.CommandName = "PagePrev";
			btnPage.Command += new CommandEventHandler(List_Commands);
			pnl.Controls.Add(btnPage);
			pnl.Controls.Add(new LiteralControl("</div>"));
		}

		pnl.Controls.Add(new LiteralControl("<div class='content'>"));
		for (int i = 0; i < gvSession.PageCount; i++)
		{
			int PageNumber = i + 1;
			if (i == gvSession.PageIndex)
			{
				Label lbPage = new Label();
				lbPage.Text = "[" + PageNumber.ToString() + "]";
				lbPage.CssClass = "page-index";
				pnl.Controls.Add(lbPage);
			}
			else
			{
				LinkButton lbPage = new LinkButton();
				lbPage.CommandName = "PageGo";
				lbPage.Command += new CommandEventHandler(List_Commands);
				lbPage.ToolTip = "Ir para a página " + PageNumber.ToString();
				lbPage.Text = PageNumber.ToString();
				pnl.Controls.Add(lbPage);
			}
		}
		pnl.Controls.Add(new LiteralControl("</div>"));

		if ((gvSession.PageIndex + 1) < gvSession.PageCount && gvSession.PageCount > 1)
		{
			pnl.Controls.Add(new LiteralControl("<div class='float-left'>"));
			ImageButton btnPage = new ImageButton();
			btnPage.ImageUrl = "~/app_image/btn/btn-avancar.png";
			btnPage.CommandName = "PageNext";
			btnPage.Command += new CommandEventHandler(List_Commands);
			btnPage.ToolTip = "Próxima Página";
			pnl.Controls.Add(btnPage);
			pnl.Controls.Add(new LiteralControl("</div>"));
		}
	}
	protected void gvSession_OnDataBound(object sender, EventArgs e)
	{
		GridViewRow gvrPager = gvSession.BottomPagerRow;

		if (gvrPager.RowType == DataControlRowType.Pager)
		{
			buildPagination(gvrPager);
		}
	}
	protected void gvSession_OnPageIndexChanged(Object sender, EventArgs e)
	{
		binder();
	}
	protected void List_Commands(object sender, CommandEventArgs e)
	{
		CmsSession cmsSession;
		switch (e.CommandName)
		{
			case "CmsDelete":
				CmsSession.Delete(LoggedUser.Client, Convert.ToInt32(e.CommandArgument));
				binder();
				showModal("Sucesso", "Item deletado com sucesso", "success");
			break;

			case "CmsView":
				SessionId = Convert.ToInt16(e.CommandArgument);
				Action = CmsAction.View;
				Server.Transfer("SessionEdit.aspx");
			break;

			case "CmsEdit":
				SessionId = Convert.ToInt16(e.CommandArgument);
				Action = CmsAction.Edit;
				Server.Transfer("SessionEdit.aspx");
			break;

			case "Approve":
				cmsSession = CmsSession.Select(this.LoggedUser.Client, Convert.ToInt16(e.CommandArgument));
				cmsSession.Status = true;
				cmsSession.Save();
				binder();
				showModal("Sucesso", "Item aprovado com sucesso", "success");
			break;

			case "Reprove":
				cmsSession = CmsSession.Select(this.LoggedUser.Client, Convert.ToInt16(e.CommandArgument));
				cmsSession.Status = false;					
				cmsSession.Save();
				binder();
				showModal("Sucesso", "Item reprovado com sucesso", "success");
			break;

			case "DeleteAll":

			break;

			case "ApproveAll":

			break;

			case "ReproveAll":

			break;

			case "ViewSubSessions":

			break;

			case "PageGo": // Ele nao entra aqui
				gvSession.PageIndex = Convert.ToInt16(e.CommandArgument)-1;
				binder();
			break;

			case "PageNext": // Ele nao entra aqui
				if (gvSession.PageIndex < (gvSession.PageCount - 1))
				{
					gvSession.PageIndex++;
				}
				binder();
			break;

			case "PagePrev": // Ele nao entra aqui
				if (gvSession.PageIndex > 0)
				{
					gvSession.PageIndex--;
				}
				binder();
			break;

		}
	}

	protected void ibNew_Click(object sender, ImageClickEventArgs e)
	{
		try
		{
			this._Action = CmsAction.New;
			Server.Transfer("SessionEdit.aspx");
		}
		catch (HttpException ex)
		{
			Response.Write(ex.StackTrace);
		}
	}
#endregion

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, so que customizada, No modelo Voltar : 1 | 2 | 3 : Avançar

 

O "OnPageIndexChanged" não esta funcionando e a ação btnPage.Command += new CommandEventHandler(List_Commands); para a navegação tmb nao funciona ela não entra no switch.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, pelo que eu vi você está com um script mananger rodando em teu codigo, o scriptmananger gera scripts em javascript que fazer acessar seus controles asp.net.

 

O asp.net vem com uma proteção nativa ativada para que ninguem tente "burlar" tua aplicação chamando eventos não desejados com a função

 

__doPostBack('cmdConsultar', '');

 

por exemplo.

 

O scriptmananger faz exatamente isso, chama uma função via javascript para acessar teu codigo e você recebe esse erro, a melhor forma de resolver isso é colocar no inicio do codigo o EnableEventValidation="false", so assim o scriptmananger vai funcionar corretamente, o seu código vai ficar +/- assim

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="statusAcionamento.aspx.cs" Inherits="statusAcionamento" EnableEventValidation="false" %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

rsegovia, se coloco o EnableEventValidation="false", ele perde o click dos botões que tem dentro do gridview Command += new CommandEventHandler(this.List_Commands);.

 

A primeira linha ficou

<%@ Page Language="C#" AutoEventWireup="True" EnableEventValidation="false" CodeBehind="SessionList.aspx.cs" Inherits="Popweb.CmsCsharp.Web.cms.SessionList" MasterPageFile="~/app_include/master/CMS.Master" %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fui obrigado a usar uma maneira errada acredito eu, mas funcionou.

 

1. Coloquei EnableEventValidation="false" no header da ASPX.

 

2. Nos botoes que paravam de funcionar ao atribuir falso em EnableEventValidation, tive que colocar o OnCommand="List_Commands"

<asp:ImageButton ID="ibView" OnCommand="List_Commands" CommandName="CmsView" ImageUrl="../../app_image/icon/btn-view.png" runat="server" />
<asp:ImageButton ID="ibEdit" OnCommand="List_Commands"CommandName="CmsEdit" ImageUrl="../../app_image/icon/btn-edit.png" runat="server" />
<asp:ImageButton ID="ibDelete" OnCommand="List_Commands" OnClientClick="java script: return confirm('Tem certeza que deseja deletar este item?');" CommandName="CmsDelete" ImageUrl="../../app_image/icon/btn-delete.png" runat="server" />
<asp:ImageButton ID="ibApprove" OnCommand="List_Commands" CommandName="Approve" ImageUrl="../../app_image/icon/btn-approve.png" runat="server" />

3. no page load, coloquei o binder sem o if (!Page.IsPostBack) apesar de saber q não é o correto.

protected void Page_Load(object sender, EventArgs e)
{
	VerifyLogin();
	binder();
}

Como quero que todo o código fique "codebehind", não consegui imaginar como usar o itemtemplate nesse caso de paginação. O que ainda não entendo é porque os eventos OnPageIndexChanging e OnPageIndexChanged do GridView não chamam suas funções ao clicar em um ImageButton dentro do GridView.

 

Estou ainda tentando solucionar sem ter que colocar o EnableEventValidation="false" e fazer da maneira correta sem borracharia, vou estudar como fazer atraves da sua sugestão do itemtemplate.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.