Visualizzare e nascondere un PopupControlExtender da una funzione server side

by Andrea 20 July 2009 08:55

Qualcuno ha posto la domanda, se fosse possibile visualizzare o nascondere un popup creato con il PopupControlExtender direttamente da una funzione server side.

A differenza del ModalPopupExtender, PopupControlExtender il  non dispone di queste funzionalità server side, ma con poche righe di codice si può aggirare la problematica.

Per fare questo dobbiamo valorizzare la proprietà BehaviorID dell'extender:

   1: <ajax:PopupControlExtender 
   2:   ID="popup"
   3:   runat="server" 
   4:   BehaviorID="popupExt" ... />

utilizzando i metodi client showPopup e hidePopup, possiamo registrare uno script che si occupi di far visualizzare o nascondere il popup. Lo script utilizzerà la funzione $find per cercare l'extender all'interno del DOM della pagina, e successivamente verrano chiamate le funzioni showPopup oppure hidePopup esposte dallo script dell'extender.

Grazie al metodo RegisterStartupScript esposto dallo ScriptManager possiamo registrare lo script che immadiatamente verrà eseguito alla fine del postback.

   1: // visualizzare il popup
   2: ScriptManager.RegisterStartupScript(this, this.GetType(), "showPopup", "$find('popupExt').showPopup();", true);
   3:  
   4: // nascondere il popup
   5: ScriptManager.RegisterStartupScript(this, this.GetType(), "hidePopup", "$find('popupExt').hidePopup();", true);

 

Tags: ,

.NET | ASP .NET | ASP.NET AJAX

italia.it, una HomePage da 2 MB

by andrea 17 July 2009 01:34

Lo ammetto, sono un pò masochista. Mi sono detto, sarà uscito il nuovo portale italia.it?

italia_it_logo Apro il browser, digito www.italia.it, mi si apre la pagina e rimango sorpreso di vederlo. Non avevo letto niente a proposito della messa online, e (stranamente) nemmeno nessuna lamentela a riguardo della grafica, contenuti o altro.

Noto però che la barra di caricamento non termina più, e da buon web developer mi metto subito a controllare quanto pesa e cosa carica (dicesi deviazione professionale), ed ecco qui il risultato: una HomePage da 2 MB!

Italia_it_size

Questo peso è dovuto alla presenza di tutte le immagini, ma nascoste, che vengono utilizzate per i vari effetti di carosello nella pagina, e tutte caricate al caricamento della pagina. (Qualcuno glielo dica che esiste anche il caricamento asincrono, AJAX, e quant'altro)

Ok, siamo nel 2009 e quasi tutti hanno una super linea adsl, ma mi immagino il povero utente che ci accede dal telefonino, e che si dovrà scaricare i ben 2 MB di files del tutto inutili…alla faccia della fruibilità dei contenuti. Per non parlare di chi invece ha una connessione a consumo.
Fortunatamente le pagine interne hanno un peso ben ridotto, vicino ai 300 KB.

Comunque, dopo la piccola lamentela, eccomi a dare il Benvenuto al nuvo italia.it

Technorati Tags:

Tags:

Internet | Generale

Consumare il web service di Reporting Services

by andrea 16 July 2009 08:05

Ecco come utilizzare il web service di Reporting Services (utilizzando basicHttpBinding)
(sia per Reporting Services 2005 che per Reporting Services 2008)

Per poter utilizzare il (uno dei) web service esposto da Reporting Serives, si dovrà creare una Service Reference facendola puntare all'url
http://127.0.0.1/reportserver/ReportService2005.asmx?wsdl
dove 127.0.0.1 sarà l'IP della macchina dove è installato Reporting Services.

Aggiunta la referenza, verrà automaticamente generata la configurazione all'interno dell'app.config, e nell'elemento basicHttpBinding saranno da modificare:

  • in binding --> security: modificare l'attributo mode in TransportCredentialOnly
  • in binding --> security --> transport: impostare clientCredentialType e proxyCredentialType a Ntlm

La configurazione finale sarà quindi la seguente:

   1: <system.serviceModel>
   2:     <bindings>
   3:         <basicHttpBinding>
   4:             <binding name="ReportingService2005Soap" closeTimeout="00:01:00"
   5:                 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
   6:                 allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
   7:                 maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
   8:                 messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
   9:                 useDefaultWebProxy="true">
  10:                 <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
  11:                     maxBytesPerRead="4096" maxNameTableCharCount="16384" />
  12:                 <security mode="TransportCredentialOnly">
  13:                     <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm"
  14:                         realm="" />
  15:                     <message clientCredentialType="UserName" algorithmSuite="Default" />
  16:                 </security>
  17:             </binding>
  18:         </basicHttpBinding>
  19:         <customBinding>
  20:             <binding name="ReportingService2005Soap12">
  21:                 <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
  22:                     messageVersion="Soap12" writeEncoding="utf-8">
  23:                     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
  24:                         maxBytesPerRead="4096" maxNameTableCharCount="16384" />
  25:                 </textMessageEncoding>
  26:                 <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
  27:                     maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Ntlm"
  28:                     bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
  29:                     keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Ntlm"
  30:                     realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
  31:                     useDefaultWebProxy="true" />
  32:             </binding>
  33:         </customBinding>
  34:     </bindings>
  35:     <client>
  36:         <endpoint address="http://127.0.0.1:80/ReportServer/ReportService2005.asmx"
  37:             binding="basicHttpBinding" bindingConfiguration="ReportingService2005Soap"
  38:             contract="ReportingServices.ReportingService2005Soap" name="ReportingService2005Soap" />
  39:     </client>
  40: </system.serviceModel>

Ora, per poter invocare i metodi del web service è necessario impersonare un utente della macchina di Reporting Services (che abbia i diritti correttamente impostati), andando a settare i valori nelle rispettive proprietà della classe ClientCredentials.

Impersonato l'utente, sarà poi possibile invocare i metodi esposti dal servizio.

   1: using (ReportingService2005SoapClient rs = new ReportingService2005SoapClient())
   2: {
   3:     rs.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
   4:     rs.ClientCredentials.Windows.ClientCredential.UserName = "username";
   5:     rs.ClientCredentials.Windows.ClientCredential.Password = "password";
   6:     rs.ClientCredentials.Windows.ClientCredential.Domain = "domain";    
   7:  
   8:     CatalogItem[] items = null;
   9:     rs.ListChildren("/", true, out items);
  10:     // [...]
  11: }

Alcune ulteriori informazioni le potete trovare al seguente link:
Reporting Services Web Service

Per un progetto a cui stò lavorando, ho dovuto fare uno studio per alcune funzionalità che dovevano pesantemente interagire con il web service di Reporting Services.
Ho notato che le informazioni in rete sono un pò sparse e frazionate, e quindi mi è sembrato utile scrivere due righe per aiutare chi fosse ai primi passi (su questa problematica).

Tags:

ASP .NET | .NET | SQL Server | Reporting Services

Extension BlogEngine.NET to ping.fm

by andrea 16 July 2009 01:59

Comunicare la presenza di nuovi post nei vari social network è una cosa diffusa, c'è chi lo fa su twitter, chi su facebook, e chi su altri portali.
Non volendo "perdere tempo" a comunicare il post nei vari social network, ho sviluppato un'extension per BlogEngine.NET che lo fa al posto mio utilizzando le API di  ping.fm.

ping_do_fm_logo_2

Ping.fm is a simple and FREE service that makes updating your social networks a snap!

Per chi non conoscesse ping.fm, questo è un'applicazione web che permette di aggiornare più di 40 social network da un unico punto centralizzato. Espongono anche delle API che chiunque può utilizzare da una propria applicazione, ed è questa la strada che ho scelto per questa extension, avendo l'enorme vantaggio di non dovermi gestire io la comunicazione con tutti i vari portali.

L'extension è appena stata approvata, e quindi ora chiunque abbia BlogEngine.NET e abbia un account su ping.fm la potrà utilizzare.

Le impostazioni sono molto semplici, è richiesta la User Application Key, che viene fornita a questo indirizzo http://ping.fm/key/, e poi con dei tag <title>, <link> e <body> sarà possibile configurare il template del messaggio.

Per scaricare l'extension ecco il link:
BlogEngine.NET to ping.fm

 

 

Tags: , ,

.NET | ASP .NET | Sito | Internet

BlogEngine.NET CheckComment Extension

by andrea 14 July 2009 05:30

Ho realizzato una semplice extension per BlogEngine.NET che permette di annullare l'inserimento di un commento in alcune condizioni:

  • arrivano da IP precisi.
  • contengono determinate parole.
  • contengono link.

ovviamente il tutto è gestibile dalla pagina delle impostazioni dell'extension, e può essere abilitata solo in parte.

Questa extension nasce dal fatto che alcuni commenti di spam riescono a passare il sistema di captcha di BlogEngine.NET, spesso arrivano dagli stessi IP, e quindi trovo questo sia il modo più veloce per risolvere la cosa.

Unica nota dolente, è che nel caso non si voglia applicare un filtro, di dovrò inserire il carattere virgola (,) in quanto la versione attuale di BlogEngine.NET vede tutti i campi come obbligatori.

Per scaricare l'extension ecco il link: BlogEngine.NET CheckComment Extension

Technorati Tags: ,

Tags: ,

ASP .NET | .NET | Sito

Codice e slide: Web Congress 2.0 - Dynamic Data

by Andrea 21 June 2009 13:37

Ecco qui disponibile il download del codice sorgente e delle slide del Web Congress 2.0 di venerdì 27 Marzo 2009 della mia sessione sui ASP.NET Dynamic Data

Slide: downlaod
Codice: download

Tags: , ,

XeDotNet | .NET | ASP .NET

Codice e slide: Community Meeting - Programming C# 3.0

by Andrea 21 June 2009 13:37

Ecco qui disponibile il download del codice sorgente e delle slide del Community Meeting di venerdì 5 giugno 2009 su Programming C# 3.0.

Slide: downlaod
Codice: download

DSC_0731DSC_0736DSC_0737

 

Tags: , ,

.NET | XeDotNet

Community Meeting: Programming C# 3.0

by andrea 04 June 2009 00:30

Domani, 5 giugno 2009 terrò a Mestre l'evento Programming C# 3.0:

Con il lancio di Visual Studio 2008 e del .NET Framework 3.5 anche il linguaggio C# ha subito un'importante evoluzione. Conoscere questi cambiamenti permette agli sviluppatori di poter scrivere del codice più pulito, leggibile e performante. In questa sessione andremo in dettaglio sulle nuove funzionalità introdotte in C# 3.0 e con esempi pratici scopriremo quali sono i vantaggi che esse portano allo sviluppatore, ma anche al codice prodotto.

  • Auto-Implemented Properties
  • Partial Method Definitions
  • Extension Methods
  • Implicitly Typed Local Variables and Arrays
  • Object Initializers
  • Collection Initializers
  • Anonymous Method
  • Lambda Expressions
  • Anonymous Types
  • Linq
  • Query Expression
  • Expression tree

…e questa è una buona occasione per conoscere per bene tutte le funzionalità di C# 3.0 prima della vicina uscita della versione 4, che porterà ulteriori novità.

Vi aspetto e vi ricordo che per registrarvi il link è il seguente:
http://www.xedotnet.org/meet/csharp.aspx

Technorati Tags: ,,

Tags: , ,

Microsoft | XeDotNet | .NET

Charles Darwin e l'essere agili

by andrea 15 May 2009 02:02
Charles Darwin  

Non è la più forte delle specie che sopravvive,
né la più intelligente,
ma quella più reattiva ai cambiamenti.

- Charles Darwin -

 

Technorati Tags: ,

Tags:

Sfoghi | Pensieri | +1

Community Meeting: .netTiers & Code Generation

by andrea 08 May 2009 00:55

netTiersLogo Ricordo a tutti, che questa sera si terrà il community meeting .netTiers & Code Generation tenuto da Davide Senatore. L'evento si terrà presso il Novotel di Mestre alle ore 19:00.

Per chi come me non conosce .netTiers, consiglio la lettura degli ultimi due post scritti da Davide Senatore:

devo ammettere che la lettura di questi post ha aumentato il mio interesse sull'argomento, e chissà che Davide riesca ad allontanare lo scetticismo che ho verso questo genere di tool.

Non ci rimane che darci appuntamento a questa sera.
Vi ricordo a tutti che dopo il meeting, continueremo la serata presso "lo scarpon" sempre a Mestre... e un bel disco volante non me lo leva nessuno. :-D

Tags: , ,

ASP .NET | .NET | XeDotNet