none
Problema com Repeater e ImageButton (continuo com problema) :( RRS feed

  • Pergunta

  • Estou com problema em usar ImageButton dentro de um Repeater que esta dentro de um UserControl, ele renderiza corretamente, mas quando eu clico para mudar de fundo me retorna uma mensagem de erro de validação de postback, se eu apontar para EnableEventValidation="false" na pagina que recebe o user control ela vai funcionar corretamente, mas gostaria de contunuar usando EnableEventValidation, pois a pagina que vai receber o user control é uma master page e vai prejudicar todas as minhas paginas se eu apontar EnableEventValidation como false, em outros casos eu usei

    //render....
    
    
    
    this.Page.ClientScript.RegisterForEventValidation(controle.id);
    
    
    
    
    
    
    
    


    Mas neste caso isso não funciona pois o controle esta dentro de um repeater....

    Como posso registrar um evento que está dentro do repeater? ou contornar esse problema sem prejudicar minhas paginas?



    Top.ascx

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="Top.ascx.cs" Inherits="Top" %>
    
    
    
    <div style="height: 26px; margin: 12px 10px 12px 0px; text-align: right;">
    
    
    
        <asp:Repeater ID="BotoesFundo" runat="server" >
    
    
    
            <ItemTemplate>
    
    
    
                <asp:ImageButton ID="btnImg" runat="server" CssClass="button_image_select_background"
    
    
    
                    Height="25" Width="25" OnClick="imgFundo_Click" ImageUrl="<%#((DataBase.FUNDOS)Container.DataItem).imagem_fundo %>"
    
    
    
                    CommandName="<%#((DataBase.FUNDOS)Container.DataItem).id %>"  />
    
    
    
            </ItemTemplate>
    
    
    
        </asp:Repeater>
    
    
    
    </div>
    
    
    
    
    
    
    
    

    Top.ascx.cs
    using System;
    
    
    
    using System.Collections.Generic;
    
    
    
    using System.Linq;
    
    
    
    using System.Web;
    
    
    
    using System.Web.UI;
    
    
    
    using System.Web.UI.WebControls;
    
    
    
    
    
    
    
    public partial class Top : System.Web.UI.UserControl
    
    
    
    {
    
    
    
        private DataBase.Entities conn = new DataBase.Entities();
    
    
    
    
    
    
    
        protected void Page_Load(object sender, EventArgs e)
    
    
    
        {
    
    
    
           var fundos = from f in conn.FUNDOS select f;
    
    
    
    
    
    
    
            BotoesFundo.DataSource = fundos;
    
    
    
            BotoesFundo.DataBind();
    
    
    
        }
    
    
    
    
    
    
    
        protected void imgFundo_Click(object sender, ImageClickEventArgs e)
    
    
    
        {
    
    
    
            long I = Convert.ToInt64(((ImageButton)sender).CommandArgument);
    
    
    
            //long I = Convert.ToInt64(((ImageButton)sender).CommandName);
    
    
    
    
    
    
    
            var fundo = (from f in conn.FUNDOS where f.id == I select f).First();
    
    
    
    
    
    
    
            changeBackground(fundo.imagem_fundo);
    
    
    
        }
    
    
    
    
    
    
    
        private void changeBackground(string imageBackgroundSrc)
    
    
    
        {
    
    
    
            System.Web.UI.HtmlControls.HtmlGenericControl styles = new System.Web.UI.HtmlControls.HtmlGenericControl("style");
    
    
    
            styles.Attributes.Add("type", "text/css");
    
    
    
            styles.InnerText = "body{ background-image: url(" + imageBackgroundSrc + ");}";
    
    
    
    
    
    
    
            this.Page.Header.Controls.Add(styles);
    
    
    
        }
    
    
    
    }<br/>
    
    
    
    

    TABELA FUNDOS
    long - id //auto numeração
    
    
    
    string - imagem_fundo //caminho da imagem
    
    
    
    

    Erro ao clicar em um dos ImageButton

    Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.




    waldyhester
    • Editado Syllas H quinta-feira, 3 de dezembro de 2009 14:08
    quarta-feira, 2 de dezembro de 2009 03:29

Respostas

Todas as Respostas