843 messaggi dal 08 aprile 2009
Se utilizzi jquery non ti conviene mettere la funzione onclick ma
$('#nome div).click(function() {
  alert('Click sul div');
});


(http://api.jquery.com/click/)

Praticamente quando clicchi sul div viene richiamata la funzione.
Per richiamare da javascript asp devi forzare un postback:
__doPostBack('eventtarget','eventargument')

Da asp l'eventtarget lo recuperi con
Request.Params["__EVENTTARGET"]
e eventargument con
Request.Params["__EVENTARGUMENT"]

quindi potresti fare

$('#nome div).click(function() {
  __doPostBack('AggiornaPanel','')
});


in asp nel Page_Load:
if (Request.Params["__EVENTTARGET"] =="AggiornaPanel")
{
    //tuo codice per aggiornare il solo panel della singola news 
}
23 messaggi dal 23 giugno 2007
www.liquidfly.it
Dunque, direi che ci siamo quasi, ora il codice fa il giro che mi ero effettivamente figurato, solo che nel page load, quando vado a variare il contenuto dell'updatepanel mi ricarica comunque tutta la pagina, tanto che mi sovrascrive le modifiche fatte con jquery all'interno dell'altro updatepanel.

Sono certo che sbaglio io, ma come dovrei fare nel pageload a far modificare solo il contenuto dell'updatepanel che mi interessa senza variare minimamente il resto della pagina?

Io ho:
 
<asp:UpdatePanel ID="Upp_Lista" runat="server"> 
   <ContentTemplate> 
      <div id="NewsText"> 
         <div id="NewsScrollText" Runat="Server></div> 
      </div> 
      <div id="NewsImages"> 
         <div id="NewsScrollImages" Runat="Server"></div> 
      </div> 
   </ContentTemplate> 
</....... 


E nel page load faccio :

 
   Dim L_ET As Object = Request.Params("__EVENTTARGET") 
   Dim L_EA As String = Request.Params("__EVENTARGUMENT") 
 
   If L_ET = "AggiornaNews" Then  
      NewsScrollText.InnerHtml = "<p>" & L_EA & "</p>" 
   Else  
      'Compilo la pagina la prima volta 
      '.... 
   End if 


Grazie

PS: Scrivi pure in C# che lo comprendo...
843 messaggi dal 08 aprile 2009
Alla luce del codice che mi hai postato credo che sia inutile generare un postback e variare il contenuto di NewsScrollText.InnerHtml con il testo che ti sei passato nella funzione di jquery al click sul div.
Quindi ti consiglio di variare il testo direttamente nella funzione di jquery e se la modifica del testo la fai sempre da javascript/jquery non è necessario che utilizzi gli Update Panel perchè non si verificherà mai che alk click provochi un postback e quindi un ricarico completo della pagina.

  
$('#nome div).click(function() {   
 $('#nome div').html('<p> contenuto </p>');  
});   
  
  
23 messaggi dal 23 giugno 2007
www.liquidfly.it
No, quello era solo per provare.... il reale contenuto viene generato dal server in base alla richiesta ed è composto da svariati oggetti che variano di tipo e quantità in base alla richiesta effettuata. Quindi non posso farlo da jquery ma solo dal server.

Ti confermo comunque che il problema persiste ancora, mi si aggiorna tutta la pagina.
843 messaggi dal 08 aprile 2009
Ho ripreso un pò il tuo esempio e l'ho modificato così (ovviamente ristretto e sarai tu che dovrai modificarlo).

Disegno un Update Panel e all'interno metto il tuo div, solo che questo lo racchiudo in un asp:linkButton:


        <asp:UpdatePanel runat="server" ID="UpdatePanel1">
        <ContentTemplate>
        <asp:LinkButton ID="link_News" runat="server" CommandArgument="ID0" 
          oncommand="link_News_Command"> <div id="NewsText" style="background-color:Lime"> 
            <div id="NewsScrollText" runat="server"></div>
 
            </div> 
            </asp:LinkButton>
        </ContentTemplate>
        </asp:UpdatePanel> 

Racchiudendo i tuoi div all'intreno del lonkbutton hai l'evento click su tutta l'area.
Poi associ l'evento command che non è altro che il click e gli dai un parametro con il commandArgument (un qualcosa che ti identifica la news sul quale hai cliccato.

Elimina l'evento click sul div di jquery ovviamente.

Nel codice invece implementi l'evento command:
    protected void link_News_Command(object sender, CommandEventArgs e)
    {
        NewsScrollText.InnerHtml = "<p>" + e.CommandArgument +"</p>";

    }


e il gioco è fatto
23 messaggi dal 23 giugno 2007
www.liquidfly.it
Mettendo insieme i tuo consigli, prove e letture qua e la ho risolto così:

Ho usato jQuery per caricare il contenuto, ovvero :

$(".Dn_NewsClosed").click(function() {
    var NewsId = $(this).attr('id');
    $('#NewsContentJ').load('Newsletter_Reader.aspx', { NewsRequest: NewsId },function(){NewsLoaded()});
... prosegue con le animazioni necessarie


e nel pageload se mi arriva la chiamata da jq

Response.Clear()
Dim sb as new System.Text.Stringbuilder()
Sb.appendline(?<h1>contenuto</h1>?)
Sb.appendline(?<p>contenuto <a href=?.>  <img src=?.>?.</p>?)
Response.write(sb.tostring())
Response.end()


Fatto così mi funziona ed ora posso dedicarmi ai dettagli.
Cosa ne pensi?

Grazie molte del tempo che mi hai dedicato.
843 messaggi dal 08 aprile 2009
Perfetto, se lo pubblichi fa sepere il link così vedo il risultato finale
Per il tempo scherzi...lo hanno fatto e lo fanno anche con me...
23 messaggi dal 23 giugno 2007
www.liquidfly.it
Quando lo pubblicherò te lo farò sicuramente vedere!!! Ci vorrà un po' però in quanto è solo una piccola parte di un grande lavoro.

Approfitto per farti ancora una domanda in merito:

dopo che ho caricato il mio codice con jQuery attraverso la funzione .load(...
e vedo il contenuto caricato... ho bisogno di fare il binding (credo si chiami così) di alcuni oggetti, ma non esistono! Ci sono, li vedo ma nel "Visualizza-->origine" di IE non vedo quel html.

Il fatto che non si veda non mi interessa, ma il problema è che se io devo fare

$('.NewsScrollImages').mousemove(function(e) {     
alert("Passa")     
    });     


non me lo chiama mai!

Forse dopo il load defo fare qualche altra istruzione per fargli sentire il nuovo codice html?
Modificato da LiquidFly il 31 maggio 2010 17.52 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.