DanBlog

Il blog di Daniele Armanasco
posts - 48, comments - 73, trackbacks - 10

Scoperte di un principiante

Cosa ho imparato oggi?
Thread asincrono e pagine asp.net

Contesto: devo lanciare un'operazione che può durare molto tempo eseguita da un metodo sincrono che non torna eventi (legacy). Devo fornire un feedback all'utente (una sorta di pagina clessidra) e, a lavoro terminato, mostrare il risultato. Soluzione adottata: creo una pagina per iniziare l'operazione e configurarne i parametri (pagina Start), una autorefreshante per comunicare che il lavoro è in corso (pagina Wait) e una pagina per mostrare i risultati (pagina Results). La pagina Start: - mette in sessione un flag per indicare che il calcolo è in corso - istanzia un delegate per richiamare il metodo sincrono con un nuovo thread; - lancia il...

posted @ Friday, May 30, 2008 3:45 AM | Feedback (8) | Filed Under [ Scoperte di un principiante ]

Meta tag per refresh automatico pagina

Promemoria:                       System.Web.UI.HtmlControls.HtmlMeta meta = new System.Web.UI.HtmlControls.HtmlMeta();             meta.HttpEquiv = "refresh";             meta.Content = "5";  // secondi             Header.Controls.Add(meta);

posted @ Friday, May 30, 2008 3:30 AM | Feedback (1) | Filed Under [ Scoperte di un principiante ]

Escape di caratteri speciali

 - stringhe classiche: myString = "prova=\"aaa\"" (uso \)  - stringhe con @: myString = @"prova=""aaa""" (raddoppio gli apici)

posted @ Wednesday, November 14, 2007 11:11 PM | Feedback (1) | Filed Under [ Scoperte di un principiante ]

New line

System.Environment.NewLine OPPURE "/r/n"

posted @ Wednesday, November 14, 2007 11:09 PM | Feedback (4) | Filed Under [ Scoperte di un principiante ]

Rimuovere elementi da una Collection su cui devo ciclare

Siccome non posso rimuovere elementi da una collection mentre la sto scorrendo con un ciclo foreach, devo salvare gli elementi da eliminare in una lista temporanea e fare poi un altro ciclo, sulla lista temporanea, per rimuoverli: IList<Child> childrenToDelete = new List<Child>();                    foreach (Child child in Father.Children) {    if (...)       childrenToDelete.Add(child); } foreach (Child child in childrenToDelete)    Father.Children.Remove(child);                        

posted @ Wednesday, November 14, 2007 11:02 PM | Feedback (2) | Filed Under [ Scoperte di un principiante ]

Implementare flags mediante operatori bitwise

Innanzitutto dichiaro un enum con la lista dei possibili flag; è importante che l'enum abbia l'attributo [Flags] e che gli elementi della lista abbiano associato un valore che sia potenza di 2 (1, 2, 4, ...). Si possono definire fino a 32 elementi. [Flags] private enum Buttons : int { ···Ok = 1, Cancel = 2, Retry = 4, Help = 8 } Tip: è possibile aggiungere alla enumerazione un elemento "All" così: All = Ok | Cancel | Retry | Help Attivare più flag: concatenali con l'operatore bitwise "|" (or): Buttons buttons; buttons = Buttons.Ok | Buttons.Cancel; Disattivare un flag: usa l'operatore bitwise "~" (not): buttons &= ~Buttons.Cancel; Verificare se un flag...

posted @ Wednesday, November 14, 2007 10:41 PM | Feedback (1) | Filed Under [ Scoperte di un principiante ]

Interfacce

Sono comode per simulare l'ereditarietà multipla. Esempio: il padre di un container può essere di tipo Grid o item; per poter castare il parent del container a qualcosa e richiamare un metodo uguale su grid e item, ho dovuto definire una interfaccia generica che prevede il metodo, specificare che grid e item la implementano, castare il parent all'interfaccia e richiamare il metodo. public interface IGenericElement     {         GenericGrid Grid();         IGenericElement Father();     } public partial class GenericGrid : System.Web.UI.UserControl, IGenericElement     {         ...         public GenericGrid Grid()         {             return this;         }         public IGenericElement Father()         {             return this;         }  ...     }     public partial class GenericContainer : System.Web.UI.UserControl, IGenericElement    ...

posted @ Wednesday, September 12, 2007 2:54 AM | Feedback (1) | Filed Under [ Scoperte di un principiante ]

Serializzazione in JSON

Per serializzare in JSON un oggetto: System.Web.Script.Serialization.JavaScriptSerializer serializer = new JavaScriptSerializer(); String result = serializer.Serialize(o);

posted @ Wednesday, September 12, 2007 1:59 AM | Feedback (1) | Filed Under [ Scoperte di un principiante ]

Avviare un processo

Per avviare un processo (ad esempio aprire il browser all'indirizzo in LinkLabel): System.Diagnostics.Process.Start(LinkLabel1.Text)

posted @ Wednesday, September 12, 2007 1:53 AM | Feedback (1) | Filed Under [ Scoperte di un principiante ]

Leggere dati postati da controlli html client-side

Supponendo di costruire, nel page load, i seguenti controlli html iniettando il testo in un literal             sb = new StringBuilder();             sb.Append("<br/><br/>Sezione CHECKBOX<br/>");             sb.Append("<input name='chk1' type='checkbox' checked=\"checked\" />");             sb.Append("<input name='chk2' type='checkbox' />");             sb.Append("<br/>Sezione INPUT TEXT <input type='text' name='txt1' value='testo predefinito' /><br/>");             sb.Append("<br/>Sezione SELECT ");             sb.Append("<select name='sel1'><option value='1'>voce 1</option><option value='2'>voce 2</option></select>");                         litBody.Text = sb.ToString(); è possibile leggere il valore degli stessi con l'istruzione: Object o = Request.Form.Get("chk1"); e via di seguito con gli altri Name dei controlli. o conterrà: "on" per le checkbox selezionate (sarà null per quelle non selezionate perchè non vengono postate) il testo inserito nelle textbox il valore associato all'opzione selezionata per le select NOTA:...

posted @ Wednesday, September 12, 2007 1:30 AM | Feedback (1) | Filed Under [ Scoperte di un principiante ]

Full Scoperte di un principiante Archive

Powered by:
Powered By Subtext Powered By ASP.NET