ScriptManager - UpdatePanel: delucidazioni

mercoledì 21 aprile 2010 - 01.07

alexmed Profilo | Guru

Ciao a tutti
Vorrei capire come bisogna comportarsi in presenza di questi due controlli.
Vi spiego:
Li ho inseriti nella pagina aspx per abilitare o meno un LinkButton alla selezione di un CheckBox per non ricaricare tutta la pagina.
All'interno del UpdatePanel ci sono anche delle TextBox ed i relativi RequiredFieldValidator.
Alla pressione del LinkButton mando i dati delle TextBox via mail.

Il problema nasce quando vado ad inserire un secondo LinkButton (o Button), in qualsiasi altra parte della pagina che dovrebbe salvarmi la pagina tra i preferiti.
Mi si apre la mascherina (correttamente), salvo tra i preferiti o annullo e i RequiredFieldValidator mi segnalano le anomalie nelle TextBox.

Cosa devo fare perchè i due LinkButton (o Button) siano indipendenti?

Grazie

alexmed

Gluck74 Profilo | Guru

Ciao,
vediamo intanto se ho capito:
hai alcuni controlli con dati e un pulsante invia che sono legati in validazione tra loro.
Inoltre nella stessa pagina vuoi mettere uno o piu bottoni che però non siano legati ai controlli dati per la validazione.

Ci sono 2 metodi:
il primo se non hai ALTRI controlli dati da validare oltre quelli detti sopra, allora semplicemente metti la proprietà CauseValidation=false, in modo da inviare il postback senza fare alcuna validazione nella pagina.

il secondo se hai invece altri contolli da validare oltre quelli detti sopra. Devi usare la proprietà ValidationGroup="nomeGruppo" sia sui controlli dati che sui pulsanti, in modo da suddividere i controlli separatamente in gruppi differenti. Ogni bottone invierà il postBack validando SOLO i dati dello stesso gruppo.

Ci sarebbe in verità un terzo metodo: fare la validazione lato server DOPO il postBack, ma un po' più dispendioso in termini di scrittura codice.

Ciao Ciao

fguida Profilo | Expert

Quando metti dei validator, essi lanciano il messaggio al postback; per evitare che tutti i "pulsanti" facciano ciò puoi usare i ValidationGroup; se leghi i validator ed il pulsante con un nome, ed il link con un altro, risolvi al 100%.
Ciao

Francesco

alexmed Profilo | Guru

Perfetto
Ho risolto con il ValidationGroup e inserendo il secondo LinkButton in un'altro UpdatePanel.

>GRAZIE A TUTTI E DUE

Ne approfitto per chiedervi unalta cosetta:
Se devo passare un parametro con un semplice link scrivo:

<a href="scheda.aspx?ID=<%# Eval("ID") %>">scheda</a>

Ma se volessi passare il parametro con un LinkButton?
alexmed

Gluck74 Profilo | Guru

Quì trovi spiegazione ed esempio:

http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.linkbutton.commandargument.aspx

alexmed Profilo | Guru

Ciao
Ho fatto ancora alcune prove ma non riesco.
Sei sicuro che si possa fare?
Tieni presente che il LinkButton è all'interno di un asp:Repeater e che prendo i dati da un database.
Ed il parametro che devo passare è l'ID di una tabella, per poi caricare i dati in un'altra pagina.

alexmed

Gluck74 Profilo | Guru

Sicuro.
Io ho fatto una cosa simile alla tua sia con un repeater, che con un gridview.

L'unica cosa è che non devi usare l'evento Click ma l'evento Command: nomePulsante_Command(......)

alexmed Profilo | Guru

Ciao
Chiedo troppo se volessi un piccolo esempio? Te ne sarei grato.
Non ho ancora ben chiaro il funzionamento di alcuni controlli in ASP.Net

Grazie in anticipo

alexmed

Gluck74 Profilo | Guru

bisogna fare qualche accorgimento.
Mi mandi il codice per favore?

alexmed Profilo | Guru

Ciao,
questo è il codice del Repeater, se ti serve altro chiedi.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Al fondo dove adesso c'è <a href="scheda_1.aspx?ID=<%# Eval("ID") %>">Apri</a> mi piacerebbe poter mettere il LinkButton o un Button

Grazie ancora

alexmed

Gluck74 Profilo | Guru

A parte che il controllo LinkButton verrà tradotto in un tag html del tutto simile a quello che hai messo tu, quindi non ci sarebbe bisogno di mettere un linkButton,
prova a mettere il codice in questo modo (un po' diverso da come ti avevo suggerito prima):

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="sdsANNUNCI" DataMember="DefaultView"> <ItemTemplate> <div class="advertising"> <table style="width: 100%"> <tr> <td rowspan="3" style="width: 143px"> <img alt="" src="Handler.ashx?ID=<%# Eval("ID") %>" class="images"/> </td> <td> <h3><%#Eval("Tipologia")%></h3> </td> <td> <h3>mq. <%#String.Format("{0:c}", Eval("Superficie"))%></h3> </td> <td> <h3 style="text-align: right"> <%#String.Format("{0:c}", Eval("Prezzo"))%> </h3> </td> </tr> <tr> <td colspan="3"><span></span> <p class="description"><b><%#Eval("Comune")%></p> </td> </tr> <tr> <td colspan="3"> <p><%#Left$(Eval("Descrizione"), 150)%> [...]</p> <div class="buttons">

<asp:LinkButton id="LinkButton1" Text="scrittaDelLink" PostBackUrl='<%# string.Concat("scheda_1.aspx?ID=", Eval("ID")) %>' runat="server"/>

</div> </td> </tr> </table> </div> </ItemTemplate> </asp:Repeater>

alexmed Profilo | Guru

>A parte che il controllo LinkButton verrà tradotto in un tag
>html del tutto simile a quello che hai messo tu, quindi non ci
>sarebbe bisogno di mettere un linkButton,
>prova a mettere il codice in questo modo (un po' diverso da come
>ti avevo suggerito prima):

Perfetto! Funziona benissimo
Ho preferito un controllo asp:LinkButton ad un normale tag <a> semplicemente per gestire meglio la grafica del sito.
Ho fatto questa scelta all'inizio e non volevo semplicemente riprendere tutto il progetto da capo visto che con il tuo aiuto sono riuscito a risolvere egregiamente.

Grazie ancora anche per l'UpdatePanel

Ciao

alexmed
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