Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    ajax refreshing user control

    Buongiorno a tutti,
    la mia pagina aspx contiene un ascx con delle property.

    la mia pagina aspx ha una griglia. al cambio di record sulla griglia, attraverso l'ajax request, va a settare le property del mio controllo ascx.

    Fin qui tutto bene (ho messo dei log che testimoniano che la property effettivamente cambia valore),
    il problema è che non riesco a vedere a video i cambiamenti (refresh).
    io vorrei che, ad esempio, una label contenesse il valore della mia property.

    Non capisco come fare; ho provato a guradare in giro e la soluzione sembra essere mettere l'ascx dentro ad un UpdatePanel, ma non mi funziona.

    Cioè non mi è chiaro come dovrebbe funzionare l'update condizionale del pannello.

    Potete aiutarmi, grazie
    Martitina
    ::Scegli se sarai Rullo o la Strada ::

  2. #2
    Ciao,
    per aggiornare l'Update Panel, devi settare un trigger, di tipo AsyncPostback, sul controllo che vuoi che aggiorni il pannello.
    Apri la collection Triggers nelle prorietà dell'UpdatePanel,
    Aggiungi un Trigger di tipo AsyncPostback e inserisci l'evento della griglia che scatena l'aggiornamento. Può anche essere solo il .Click() su un oggetto all'interno della griglia.

    Potrebbe capitare che la proprietà che hai settato si svuoti , perchè al caricamento dell'ascx (l'UserControl) esegue la New() e svuota le prorietà. In questo caso devi ripassare le prorietà NELLA New() o caricare il contenuto dell'ascx tramite una sub pubblica diversa dalla _Load() (la new() scatta quando istanzi l'oggetto, la _Load quando lo carichi, l'assegnazione delle proprietà puoi farla solo dopo la _Load, perchè prima non esistono )

    Non pretendo di essere stato chiaro, spero solo che si capisca

    Ciao,
    b.

  3. #3
    sei stato chiaro, ma continua a non funzionarmi

    codice:
     <asp:UpdatePanel ID="OrderHeaderUpdatePanel" runat="server" UpdateMode="Conditional">
    <Triggers>
    <asp:AsyncPostBackTrigger controlid="RadGridListOrder" eventname="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
    <OH:OrderHeader id="OrderHeaderOH" runat="server" />
    </ContentTemplate>
    </asp:UpdatePanel>

    codice:
      
    Protected Sub RadGridListOrder_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadGridListOrder.SelectedIndexChanged
    OrderHeaderOH.updateOrderCode("test")         
    OrderHeaderUpdatePanel.Update()
    End Sub
    la sequenza degi eventi sullo user control è: init, load, updateOrderCode
    dentro updateOrderCode vado a scrivere su una label il parametro passatogli ("test") che però non è visualizzato
    Non so che pesci pigliare...
    ::Scegli se sarai Rullo o la Strada ::

  4. #4
    Che cosa ti dice il tuo amico debug?
    Gli eventi scattano?
    L'evento SelectedIndexChanged della Griglia non causa postback e quindi non innesca l'evento di callback che serve per aggiornare la visualizzazione.
    Prova invece ad usare una HyperlinkBoundColumn con commandargument=container.dataItemIndex

    Ciao,
    b.

  5. #5
    scusami, credo di saperne meno di quello che mi servirebbe per capirti

    mi stai dicendo: non causi un postback come predtendi di vedere qualcosa di diverso a video, giusto?

    ok. ma la soluzione che mi dai non l'ho capita, in ogni caso io necessito di averlo sul cambio della riga (click ovunque sulla riga) e, non so se cambia qualcosa, roicordo che la griglia è ajaxata
    ::Scegli se sarai Rullo o la Strada ::

  6. #6
    mmmh, no, secondo il tuo script nell'update panel c'è solo un OrderHeader, che peraltro non ho mai usato.

    Ad ogni modo, per venire incontro alle tue esigenze, ho trovato uno script su codeproject che dovrebbe fare al caso tuo:

    codice:
    protected sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    
        if e.Row.DataItemIndex > -1 then
    
           e.Row.Attributes.Add("onMouseOver",  "this.style.cursor='hand';")
           e.Row.Attributes.Add("onclick",  this.GetPostBackClientEvent(GridView1, "Select$" & _
     e.Row.RowIndex.ToString()))
        end if
    (l'ho tradotto al volo dal C#, non escludo di aver fatto qualche errore )

    Così, al click della riga scatta l'evento RowCommand con argomenti (e.)CommandName="Select", (e.)CommandArgument=<numero di riga>
    Il <Numero di riga> è quello che ti serve, giusto?
    Il tutto dovrebbe funzionare a patto che RadGridListOrder sia dentro l'updatePanel.

    Ciao,
    b.

  7. #7
    Ciao,
    credo che la soluzione proposta da Bearseeker sia per una normale GridView (Leggete questo post che spiega in dettaglio la soluzione con qualche precisazione in più).
    però se non ho letto male, martitina usa una RadGrid .
    Ora, io in passato ho usato i RadControl, e qualche problemino con gli UpdatePanel me li hanno dati.

    In sostanza comunque quello che hai scritto a regola dovrebbe funzionare, l'unica incognita è appunto il PostBack. Verifica che effettivamente cliccando su una riga, scatti il postback e l'esecuzione dell'evento SelectedIndexChanged.

    Se scatta è sufficente la riga di comando OrderHeaderUpdatePanel.Update() anche senza trigger (o uno o l'altro, ma tutti e due no).
    Se non scatta, devi trovare il modo di mandare il postback al click. Io non conosco la RadGrid, e non so se la soluzione proposta possa essere applicata. In alternativa vedi sa la radGrid ha un pulsante, evento, SelectCommand o qualsiasi sua proprietà che ti permetta di fare la selezione e mandare il PostBack.

    Domanda: ma il controllo OrderHeaderOH l'hai fatto tu? che fa?

    Ciao

  8. #8
    prima di tutto grazie ad entrambi per la vostra cortesia,

    SelectedIndexChanged scatta. OrderHeaderOH è il mio user control e per semplificare diciamo che contiene solo una label che voglio assuma il valore che gli passa l'aspx e che abbia un "refresh"

    codice:
    Protected Sub RadGridListOrder_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadGridListOrder.SelectedIndexChanged
            OrderHeaderOH.updateOrderCode("test")
            OrderHeaderUpdatePanel.Update()     
    End Sub
    ora ho tirato via il trigger,ho lasciato così
    codice:
     <asp:UpdatePanel ID="OrderHeaderUpdatePanel" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
    <OH:OrderHeader id="OrderHeaderOH" runat="server"/>                                               
    </ContentTemplate>
    </asp:UpdatePanel>
    ma continuo a non vedere a video la label assumere nessun valore, nonostamte i log testimoniano che effettivamente passo per la sub dell'ascx OrderHeaderOH.updateOrderCode e la label contiene il valore passato nel parametro

    io credo che sia un problema di ajax. C'è una cosa che forse può dare fastidio ed è che il mio UpdatePanel in questione a sua volta è contenuto in un panel ajaxato alla griglia.
    ::Scegli se sarai Rullo o la Strada ::

  9. #9
    spero che ci sia ancora qualcuno che guarda questo thread...
    non venendone fuori ho ridotto tutto all'osso ho fatto un test molto semplice

    ASPX
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="test1.aspx.vb" Inherits="FrontEndASCX_test_test1" %>
     <%@ Register TagPrefix="UC" TagName="UCControl" Src="~/FrontEndASCX/test/test.ascx" %>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server">     
    <title></title> </head>
     <body>   
      <form id="form1" runat="server">  
       <div>     
          <asp:ScriptManager ID="ScriptManager1" runat="server">         </asp:ScriptManager> 
                 <telerik:radajaxmanager ID="RadAjaxManager1" runat="server"> 
                <AjaxSettings>        
    
             <telerik:AjaxSetting AjaxControlID="RadAjaxManager1">  
                       <UpdatedControls>       
              
            <telerik:AjaxUpdatedControl ControlID="DropDownList1" />     
                    </UpdatedControls>     
      
              </telerik:AjaxSetting>      
           </AjaxSettings>   
          </telerik:radajaxmanager>         
                            <asp:DropDownList ID="DropDownList1" runat="server">   
                  </asp:DropDownList>   
                            <asp:UpdatePanel ID="myPanel" runat="server" UpdateMode="Conditional">     
            <ContentTemplate>          
            <UC:UCControl id="UCControl1" runat="server" />    
                  </ContentTemplate>  
           </asp:UpdatePanel>    
              </div>  
         </form> 
    </body>
     </html>
    ASPX.vb
    codice:
    Partial Class FrontEndASCX_test_test1     Inherits System.Web.UI.Page   
        Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init    
         fillCombo()    
     End Sub      
    Private Sub fillCombo()       
      Dim a As New List(Of Long)     
        a.Add(1)     
        a.Add(2)      
       a.Add(3)     
        a.Add(4)        
      DropDownList1.AutoPostBack = True     
        DropDownList1.DataSource = a   
          DropDownList1.DataBind()    
     End Sub    
    
      Protected Sub DropDownList1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.TextChanged    
         'UCControl1.IDCart = 1     
        UCControl1.setCart(DropDownList1.SelectedValue)  
       End Sub End Class
    ASCX


    codice:
    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="test.ascx.vb" Inherits="FrontEndASCX_test_test" %> 
    <asp:Label ID="Label1" runat="server" Text="__"></asp:Label>
    ASCX.vb
    codice:
     Partial Class FrontEndASCX_test_test     Inherits System.Web.UI.UserControl  
        Dim myidcart As Long 
         Public Property IDCart() As Long    
         Get             Return myIDCart      
       End Get       
      Set(ByVal value As Long)           
      myidcart = value     
        End Set  
       End Property     
    
     Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init        
     Label1.Text += "Page_Init " & IDCart   
      End Sub   
       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load  
           Label1.Text += "Page_Load " & IDCart   
      End Sub     
     Public Sub setCart(ByVal parCart As Long)     
        IDCart = parCart        
     Label1.Text += "setCart " & parCart    
     End Sub
      End Class
    come metto ajaxato il controllo combo (nel mio caso reale è una radgrid ma credo che il test vada bene uguale) non funziona più niente.
    cosa avrei dovuto scrivere per farlo funzionare con ajax??
    Grazie
    ::Scegli se sarai Rullo o la Strada ::

  10. #10
    Purtroppo conosco i controlli radAjax solo di nome.... ;-)
    Non so come funzionail radajaxmanager e come fa a renderizzare le parti di pagina.

    io ti posso spiegare come farlo con i controlli standard, ovvero lo scriptmanager e updatepanel.

    metti nella tua pagina:
    scriptmanager
    griglia
    updatepanel
    il tuo controllo dentro updatepanel
    setta updatemode=conditional
    aggancia un trigger: controllo griglia ed evento selectedindexchanged
    nell'evento RadGridListOrder_SelectedIndexChanged metti
    UCControl1.setCart("il_valore_che_serve");

    Fammi sapere

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.