Problema con post-back e linkButton

venerdì 12 dicembre 2008 - 10.47

Gemini Profilo | Expert

Ciao a tutti,
sto realizzando un sito che prevede dei banner pubblicitari nell'ntestazione. Banner che posso essere in formato flash o semplici immagini, e questi cambiano ogni volta che carico una pagina. Quando clicco sul banner voglio gestire l'evento click.
Ho realizzato una masterpage e all'interno inserisco un controllo utente nel quale carico i banner.

Codice controllo utente:
<asp:LinkButton ID="lbBannerIntestazione" runat="server" OnClick="Banner_Click">
<asp:PlaceHolder ID="phBannerIntestazione" runat="server"></asp:PlaceHolder>
</asp:LinkButton>

<asp:LinkButton ID="lbBannerDx" runat="server" OnClick="Banner_Click">
<asp:PlaceHolder ID="phBannerDx" runat="server"></asp:PlaceHolder>
</asp:LinkButton>

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
clsTipoBanner banner = new clsTipoBanner();
string banner_code = string.Empty;

banner = clsBanner.getBanner("intestazione");
banner_code = clsBanner.getBannerCode("intestazione", Costanti.width_banner_intestazione, Costanti.height_banner_intestazione);
phBannerIntestazione.Controls.Add(new LiteralControl(banner_code));
lbBannerIntestazione.CommandArgument = banner.id_banner;


banner = clsBanner.getBanner("intestazione_dx");
banner_code = clsBanner.getBannerCode("intestazione_dx", Costanti.width_banner_intestazione_dx, Costanti.height_banner_intestazione_dx);
phBannerDx.Controls.Add(new LiteralControl(banner_code));
lbBannerDx.CommandArgument = banner.id_banner;
}
}

protected void Banner_Click(object sender, EventArgs e)
{

}


Ho due problemi:
1-Il link non mi funziona quando ho un banner in formato flash. Clicco ma non fa nulla
2- Quando clicco su un banner, per esempio in formato jpg, ricevo questo errore:

Argomento di postback o callback non valido. La convalida degli eventi viene abilitata mediante <pages enableEventValidation="true"/> nella configurazione oppure mediante <%@ Page EnableEventValidation="true" %> in una pagina. Per motivi di sicurezza, viene verificato che gli argomenti con cui eseguire il postback o il callback di eventi siano originati dal controllo server che ne aveva inizialmente eseguito il rendering. Se i dati sono validi e previsti, utilizzare il metodo ClientScriptManager.RegisterForEventValidation per registrare i dati di postback o callback per la convalida.
Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.

Dettagli eccezione: System.ArgumentException: Argomento di postback o callback non valido. La convalida degli eventi viene abilitata mediante <pages enableEventValidation="true"/> nella configurazione oppure mediante <%@ Page EnableEventValidation="true" %> in una pagina. Per motivi di sicurezza, viene verificato che gli argomenti con cui eseguire il postback o il callback di eventi siano originati dal controllo server che ne aveva inizialmente eseguito il rendering. Se i dati sono validi e previsti, utilizzare il metodo ClientScriptManager.RegisterForEventValidation per registrare i dati di postback o callback per la convalida.

Errore nel codice sorgente:

Durante l'esecuzione della richiesta Web corrente è stata generata un'eccezione non gestita. Per informazioni sull'origine e la posizione dell'eccezione, vedere l'analisi dello stack dell'eccezione riportata di seguito.

Analisi dello stack:


[ArgumentException: Argomento di postback o callback non valido. La convalida degli eventi viene abilitata mediante <pages enableEventValidation="true"/> nella configurazione oppure mediante <%@ Page EnableEventValidation="true" %> in una pagina. Per motivi di sicurezza, viene verificato che gli argomenti con cui eseguire il postback o il callback di eventi siano originati dal controllo server che ne aveva inizialmente eseguito il rendering. Se i dati sono validi e previsti, utilizzare il metodo ClientScriptManager.RegisterForEventValidation per registrare i dati di postback o callback per la convalida.]
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +260
System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +83
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +52
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +244
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3824


Come risolvo questi due problemi?
Grazie mille

Stroke Profilo | Junior Member

Perchè non usi l'oggetto <asp:adrotator> che fa tutte le cose che ti servono e forse qualcosa in più?
http://www.aspcode.it/tips/95_Un-circuito-di-rotazione-banner-in-ASP.net:-il-componente-AdRotator.htm
ciao
Furio
http://www.opsi.ws

Gemini Profilo | Expert

Grazie,
ma se invece di un file xml, io volessi utilizzare un db o una struttura dati, come faccio?
Come faccio a gestire l'evento click? Prima di fare la redirect devo aggioranare il numero di click nel db.

Stroke Profilo | Junior Member

l'adrotator è collegabile tranquillamente ad un database, e gestisce da solo il link che devi inserire nella tabella.
questa è la query per la creazione della tabella tipo
CREATE TABLE [dbo].[AdbUpBanner](
[Prog] [int] IDENTITY(1,1) NOT NULL,
[ImageUrl] [nvarchar](150) NOT NULL,
[NavigateUrl] [nvarchar](150) NULL,
[AlternateText] [nvarchar](150) NULL,
[Parola chiave] [nvarchar](50) NULL,
[Impressions] [int] NULL,
[Width] [int] NULL,
[Height] [int] NULL,
CONSTRAINT [PK_AdbUpBanner] PRIMARY KEY CLUSTERED
(
[Prog] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

questa la parte html
<asp:AdRotator ID="AdRotator1" runat="server" DataSourceID="SqlDataSource1" Target="_blank" />
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:BibMarketDBConnectionString %>"
SelectCommand="BannerAlto" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>

e questa la store procedure che chiamo nel sqldatasource
Create PROCEDURE [dbo].[BannerAlto]

AS
BEGIN
SELECT [Prog],
[ImageUrl],
[NavigateUrl],
[AlternateText],
[Parola chiave] AS Parola_chiave,
[Impressions],
[Width],
[Height]
FROM [AdbUpBanner]
END


Impressions praticamente crea una percentuale di visibilità sommando tutte le impressions del tuo db, in pratica puoi dare più impression ad uno piuttosto che ad un altro banner. Il resto è tutto intuibile.
Devi solo riempire il db.
ciao
Furio
http://www.opsi.ws

Gemini Profilo | Expert

se invece di passare un db, voglio passare un tipo strutturato, come lo dichiaro?
Tipo struttura per esempio fatto così:
tipo.ImageUrl
ecc

Stroke Profilo | Junior Member

Per passare file flash su adbanner guarda questi link:
http://aspnet.html.it/script/vedi/4625/adrotator-con-flash/
http://webscripts.softpedia.com/scriptDownload/AdRotator-With-Flash-Files-Download-32759.html
sono la struttura che vai cercando.
Adrotator di suo non accetta file sw, ma solo immagini.
ciao
Furio
http://www.opsi.ws
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5