10 messaggi dal 24 agosto 2006
Ciao
uso un controllo repeater nella mia pagina web.
<asp:Repeater ID="MyRepeater" runat="server"  OnItemCommand="MyRepeater_onItemCommand" onItemDataBound="MyRepeater_ItemDataBound" >
                                 
<HeaderTemplate>    
</HeaderTemplate> 
<ItemTemplate>       
<li class="grid_2-left"><p><small>QTA.:
               <input type="text" runat="server" id="Text1" value="0" style="width: 30px"  Height="25px" name='testo_<%#DataBinder.Eval(Container.DataItem, "id")%>' />        


Fino ad oggi l'ho usato principalmente per recuperare il dato inserito manualmente nella casella. Ora ho la neccesità di scrivere il dato all'interno dopo aver fatto alcune elaborazioni.

Il codice che uso lato server:
 Public Sub MyRepeater_onItemCommand(ByVal Sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs)



        Dim pippo As String
        pippo = e.CommandArgument
        Dim test As String = e.CommandName
        Dim id As String = e.CommandArgument.ToString

        Dim testo As String = "testo_" & id
        'valore della variabile ricevuta
        Dim testo_value As String = Request.Form(testo)

        Procedura(id, testo_value)


Come faccio ha scrivere il valore nella casella di testo dopo aver eseguito il comando "Procedura"?

Ho provato in vari modi ma mi sfugge qualcosa .....probabilmente concettuale.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
qui l'obiettivo è ottenere un riferimento alla casella di testo, in modo che si possa valorizzare la sua proprietà Value.

Ci puoi arrivare da e, ovvero l'oggetto di tipo RepeaterCommandEventArgs che ti viene fornito come argomento della Sub che hai postato. Questo oggetto infatti ha una proprietà Item che identifica il RepeaterItem da cui si è originato il comando, ed esso ha un metodo FindControl che ti permetterà di arrivare al casella di testo.

Dim textbox = TryCast(e.Item.FindControl("Text1"), System.Web.UI.HtmlControls.HtmlInputText)
'Qui imposti il valore
textbox.Value = "tuoValore"


ciao,
Moreno
Modificato da BrightSoul il 26 giugno 2016 23.32 -

Enjoy learning and just keep making
10 messaggi dal 24 agosto 2006
Grazie mille.
Funziona correttamente e ho anche capito il funzionamento grazie alla tua spiegazione.

Ho un'altra domanda, ma non so se si può fare.....spero proprio di si perchè altrimenti non saprei come sistemare il funzionamento.

Il repeater ha una pagina molto lunga, con la scrittura della casella vado ad aggiornare la quantità del prodotto selezionato.
Poi ho scritto questo che mi imposta il focus sulla casella :

if texbox IsNot Nothing Then
   textbox.focus()
End if


il cursore si posiziona in effetti nella casella appena editata in modo coretto.

Mi aspettavo che la pagina restasse posizionata all'altezza dell'articolo , che si trova scorrendo parecchio in basso, invece mi si riposiziona in alto .

Ho provato ad andare in debug, ma dopo aver eseguito onItemCommand non faccio nessun ricaricamento del repeater. Forse c'è qualche evento che non vedo da gestire?
C'è un modo per gestire questo funzionamento, in modo che resti sempre posizionato sull'articolo selezionato?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
vedi se riesci a riposizionarti nel punto esatto usando l'attributo MaintainScrollPositionOnPostback:
http://www.aspitalia.com/script/767/Mantenere-Posizione-Pagina-PostBack-ASP.NET-2.0.aspx

Enjoy learning and just keep making
10 messaggi dal 24 agosto 2006
Avevo già provato, sia inserendolo nella pagina, sia provando nel web config......ma niente. La pagina torna sempre in alto.

Ho provato a togliere anche la Master.page credendo che fosse quella ( forse) a interferire.

I dati inseriti nelle form non cambiano , quindi non viene ricaricata ex novo.
In debug quando clicco un tasto, passa prima per il load ( dove ho inserito il Not IsPostBack.....quindi non esegue codice, lo salta tutto), poi passa per il onItemCommand.
Non esegue nessuna altra porzione di codice dopo questo comando......

C'è qualche alternativa a quel comando?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


C'è qualche alternativa a quel comando?

Sì, bisognerebbe capire come mai non funziona ma nel frattempo puoi provare alcune alternative:
  • La prima sfrutta le ancore HTML per far scrollare la pagina in uno specifico punto. Dai alla <li> un id univoco, come il seguente:
    <li class="grid_2-left" id="<%# "elemento" + DataBinder.Eval(Container.DataItem, "id")%>">
    
    e poi dall'Asp:Button che si trova nel tuo ItemTemplate, imposti il seguente PostBackUrl
    <asp:Button id="bottone" runat="server" PostbackUrl='<%# "#elemento" + DataBinder.Eval(Container.DataItem, "id")%>' />
    

    Il postback si verificherà come al solito ma, al ricaricamento di pagina, il browser ti posizionerà in corrispondenza di quella <li>.
    Se hai errore, metti questo attributo sulla direttiva Page.
    <%@ Page EnableEventValidation="false" ...
    

    Attenzione perché questa soluzione non ti farà scrollare nell'esatto punto da cui si era originato il postback, ma nei pressi. Infatti il browser ti posizionerà sulla <li> in questione che sarà dunque il primo elemento visibile.
  • La seconda soluzione consiste nel gestire col javascript l'evento scroll della window e copiare il valore di window.scrollY in un campo hidden, come vedi in questo esempio:
    https://jsfiddle.net/7cqftnkf/1/
    Al ricaricamento di pagina, dopo il postback, rileggi il valore del campo hidden e scrolla col javascript (window.scrollTo) in quella posizione.
  • L'ultima soluzione che mi viene in mente è di non causare postback completi di pagina ma di usare Microsoft Ajax (cerca UpdatePanel qui su aspitalia e sul web) oppure richieste ajax con jquery. La pagina così non dovrà ricaricarsi ma forse questo sistema ti compoterà più modifiche rispetto alle altre due soluzioni


ciao,
Moreno
Modificato da BrightSoul il 28 giugno 2016 22.29 -

Enjoy learning and just keep making
1.508 messaggi dal 27 dicembre 2005
Ma PostbackUrl non ti manda su un' altra pagina ?
11.886 messaggi dal 09 febbraio 2002
Contributi
Non necessariamente, infatti se lo valorizzi con "#idelemento" ti posta alla pagina stessa, aggiungendo un'ancora all'url corrente.

Diciamo che è un "uso creativo" di PostbackUrl. Però ora che me lo segnali, mi sono accorto che nel codice che ho postato manca un simbolo #, quindi vado a correggerlo :D

Grazie per il commento, mi hai aiutato a sistemare un errore (ancora una volta).
Modificato da BrightSoul il 28 giugno 2016 22.29 -

Enjoy learning and just keep making

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.