Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126

    Dove inizia e dove finisce il code-behind.. c'è da impazzire..

    ciao, purtroppo non mi sono ancora reso conto dove inizia il codebehind e dove finisce visto che comunque pur avendo le funzioni in un file .cs o .vb, bisognerà sempre scrivere qualcosa all'interno della pagina aspx per vedere il risultato..
    ad es. ho questo problema: faccio la connessione, instanzio il datareader, recupero un campo, faccio il substring su questo campo e poi... eh.. e qui nasce il problema.. una volta ottenuta la mia bella variabile che contine il campo substringato, come cavolo la stampo nella pagina aspx? vi faccio vedere:
    codice:
    		private void Page_Load(object sender, System.EventArgs e)
    		{
    		
    			
    			
    
    			if(!IsPostBack)
    			{
    				string strconn = ConfigurationSettings.AppSettings["Provider"]+Server.MapPath("~/mdb-database/")+ConfigurationSettings.AppSettings["DatabaseName"];	
    				
    				string sql = "SELECT Top 5 * FROM news_lavori ORDER by data_ins ASC";
    				
    				OleDbConnection conn= new OleDbConnection(strconn);
    				OleDbCommand cmd=new OleDbCommand(sql,conn);	
    				conn.Open();
    				OleDbDataReader reader=cmd.ExecuteReader();
    				
    				Work_repeater.DataSource=reader;
    				while(reader.Read())
    				{
    				string txt=reader["testo"].ToString();
    				txt=txt.Substring(0,20);
    				Response.Write(txt);
    				Work_repeater.DataBind();
    				}
    				conn.Close();
    				
    
    				detail_repeater.Visible=false;	
    			}
    				else
    				{
    			detail_repeater.Visible=true;
    			Work_repeater.Visible=false;	
    			
    			}
    		}
    Ora txt la voglio mettere in una cella di una tabella che si trova nell'ItemTemplate di un repeater:
    codice:
    <TD colSpan="3">[img]<%#DataBinder.Eval(Container.DataItem,"img")%>[/img]<span class="testo_news"> <%#DataBinder.Eval(Container.DataItem,"txt")%></span></TD>
    se fosse stato un campo come "img" come potete vedere, non ci sarebbero stti problemi (anche se non ho capito perchè si fà così e che cavolo significa quel #), ma siccome si tratta di una variabile (txt) non saprei proprio com stamparla..
    ovviamente il codice sopra non funziona
    Chi mi illumina?
    Voglio l'alt+s anche per FF

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Non ho il tempo di controllare il codice che hai scritto, ma mi limito a fornirti alcune indicazioni di massima sul code behind.

    In realtà, il termine si riferisce solamente alla possibilità di separare il codice lato server che gestisce la visualizzazione della pagina dalla visualizzazione della pagina stessa, niente di più.

    Quando trovi tag lato server che includono il carattere #, hai a che fare con espressioni di data binding; il data binding è il meccanismo che consente di collegare controlli a sorgenti di dati; generalmente, è il codice del controllo che, una volta compilato, preleva i dati e li restituisce sottoforma di HTML al browser chiamante.

    Nel tuo caso, l'uso di tag <%# ... %> serve per definire il punto (e il formato, in certi casi) in cui un elemento proveniente dalla sorgente dati viene visualizzato all'interno di un template (modello); ciascun template non fa altro che definire il contenuto HTML da ripetere per ciascun elemento da visualizzare.

    La pagina aspx rappresenta comunque la classe di una pagina che deve essere compilata e che deriva dalla classe che hai inserito (ed eventualmente compilato, se vuoi) in un file sorgente esterno: questo è il code behind.

    Non entro nel merito del tuo problema, poichè dovrei copiare il tuo codice o analizzarlo a fondo per scoprire il problema, dato che ti sei limitato a dire che "ti va in errore" senza spiegare quale errore ti viene restituito.

    A parte questo, c'è la possibilità di inserire valori lato server senza usare le espressioni di databinding: basta dichiarare nel template un elemento HTML aggiungendo ad esso la clausola runat="server". All'interno dell'evento ItemDataBinding di ciascun controllo associato ai dati (il Repeater, nel tuo caso) è possibile ottenere un riferimento al controllo lato server che hai inserito "chiamandolo per nome" attraverso il metodo e.Item.FindControl() e impostare le proprietà del controllo attraverso il codice.

    Nei casi più complessi, adotto questa tecnica per massimizzare le possibilità di personalizzazione lavorando completamente tramite codice C# dal lato server.

    Approfondisci gli argomenti citati consultando la Microsoft .NET SDK Documentation per ottenere suggerimenti ed esempi di utilizzo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da alka
    Non ho il tempo di controllare il codice che hai scritto, ma mi limito a fornirti alcune indicazioni di massima sul code behind.

    In realtà, il termine si riferisce solamente alla possibilità di separare il codice lato server che gestisce la visualizzazione della pagina dalla visualizzazione della pagina stessa, niente di più.

    Quando trovi tag lato server che includono il carattere #, hai a che fare con espressioni di data binding; il data binding è il meccanismo che consente di collegare controlli a sorgenti di dati; generalmente, è il codice del controllo che, una volta compilato, preleva i dati e li restituisce sottoforma di HTML al browser chiamante.

    Nel tuo caso, l'uso di tag <%# ... %> serve per definire il punto (e il formato, in certi casi) in cui un elemento proveniente dalla sorgente dati viene visualizzato all'interno di un template (modello); ciascun template non fa altro che definire il contenuto HTML da ripetere per ciascun elemento da visualizzare.

    La pagina aspx rappresenta comunque la classe di una pagina che deve essere compilata e che deriva dalla classe che hai inserito (ed eventualmente compilato, se vuoi) in un file sorgente esterno: questo è il code behind.

    Non entro nel merito del tuo problema, poichè dovrei copiare il tuo codice o analizzarlo a fondo per scoprire il problema, dato che ti sei limitato a dire che "ti va in errore" senza spiegare quale errore ti viene restituito.

    A parte questo, c'è la possibilità di inserire valori lato server senza usare le espressioni di databinding: basta dichiarare nel template un elemento HTML aggiungendo ad esso la clausola runat="server". All'interno dell'evento ItemDataBinding di ciascun controllo associato ai dati (il Repeater, nel tuo caso) è possibile ottenere un riferimento al controllo lato server che hai inserito "chiamandolo per nome" attraverso il metodo e.Item.FindControl() e impostare le proprietà del controllo attraverso il codice.

    Nei casi più complessi, adotto questa tecnica per massimizzare le possibilità di personalizzazione lavorando completamente tramite codice C# dal lato server.

    Approfondisci gli argomenti citati consultando la Microsoft .NET SDK Documentation per ottenere suggerimenti ed esempi di utilizzo.

    Ciao!
    bhè che dire.. grazie
    Voglio l'alt+s anche per FF

  4. #4
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    cmq credo di aver capito il problema.. non di averlo risolto..
    ah certo l'errore è: System.NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto alla riga (52):
    codice:
    		
    
    			if(!IsPostBack)
    			{
    				string strconn = ConfigurationSettings.AppSettings["Provider"]+Server.MapPath("~/mdb-database/")+ConfigurationSettings.AppSettings["DatabaseName"];	
    				
    				string sql = "SELECT Top 5 * FROM news_lavori ORDER by data_ins ASC";
    				
    				OleDbConnection conn= new OleDbConnection(strconn);
    				OleDbCommand cmd=new OleDbCommand(sql,conn);	
    				conn.Open();
    				OleDbDataReader reader=cmd.ExecuteReader();
    				
    				Work_repeater.DataSource=reader;
    				try
    				{
    					while(reader.Read())
    					{
    						string txt=reader["testo"].ToString();
    						txt=txt.Substring(0,20);
    						anteprima_testo.Text=txt;
    						Response.Write(txt);
    						Work_repeater.DataBind();
    					}
    				}
    				catch (Exception err)
    				{
    				
    				Response.Write(err);
    					
    				}
    				conn.Close();
    				
    
    				detail_repeater.Visible=false;	
    			}
    				else
    				{
    			detail_repeater.Visible=true;
    			Work_repeater.Visible=false;	
    			
    			}
    		}
    la riga 52 è questa:
    codice:
    anteprima_testo.Text=txt;
    probabilmente mi ritorna quell'errore perchè il controllo <asp:label> (anteprima_testo) si trova all'interno del repeater, e quindi dovrei referenziarlo.. penso che sia questo il problema.. spero che qualcuno mi possa aiutare
    Voglio l'alt+s anche per FF

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127
    Originariamente inviato da dops
    probabilmente mi ritorna quell'errore perchè il controllo <asp:label> (anteprima_testo) si trova all'interno del repeater, e quindi dovrei referenziarlo.. penso che sia questo il problema.. spero che qualcuno mi possa aiutare
    esattamente ..
    guarda qua
    http://forum.html.it/forum/search.ph...by=&sortorder=
    il procedimento è lo stesso anke se usi un label o un literal o un qualsiasi controllo

  6. #6
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da sms
    esattamente ..
    guarda qua
    http://forum.html.it/forum/search.ph...by=&sortorder=
    il procedimento è lo stesso anke se usi un label o un literal o un qualsiasi controllo
    hehe.. bello schiaffo morale.. meglio fare una ricerca che scrivere così tanto
    Voglio l'alt+s anche per FF

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.