Technology Experience
.NET World

Silverlight ed il download di file

Allora, questo è un problema che mi attanaglia. Considerate la seguente schermata:

IeDownloadFile

E’ una applicazione Silverlight brutta e orribile, con 4 pulsanti. Non c’è uso di M-V-VM, ma il caro e buon vecchio code-behind. Tutti questi pulsanti effettuano il download di un normalissimo file pdf raggiungibile via http.

Cliccando sul pulsante PDF con code behind il codice eseguito è un semplice:

private void button1_Click(object sender, RoutedEventArgs e)
{
    HtmlPage.Window.Navigate(new Uri(URL, UriKind.Absolute));
}

 

Cliccando sul pulsante PDF con timer il codice è il seguente:

private void button2_Click(object sender, RoutedEventArgs e)
{
    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(3);
    timer.Tick += (s2, e2) =>
        {
            timer.Stop();
            HtmlPage.Window.Navigate(new Uri(URL, UriKind.Absolute));
        };
    timer.Start();
}

 

Cliccando sul terzo pulsante PDF con javascript il codice è il seguente:

private void button3_Click(object sender, RoutedEventArgs e)
{
    object[] param = new object[1];
    param[0] = URL;
    System.Windows.Browser.HtmlPage.Window.Invoke("openPDF", param);
}

 

Con javascript, viene invocata una funzione ‘openDF’ definita nella pagina .aspx che hosta il plug-in di Silverlight.

Comunque sia, in tutti questi casi elencati sopra, il download del file PDF da parte di Internet Explorer viene inizialmente bloccato per motivi di sicurezza. IE fa apparire una toolbar gialla:

IeDownloadBlocked

Per effettuare il download, dovete dare l’autorizzazione e ripetere l’operazione. Nella mia applicazione scema di oggi non ci sono troppi problemi Smile, ma in un’applicazione reale viene effettuato il refresh della pagina .aspx, e quindi l’utente deve rifare tutto daccapo. Sad smile

L’unica soluzione che ho trovato è stata quella di usare un HyperlinkButton, “templizzato” in modo tale che sulla pagina della nostra applicazione possa apparire (quasi) come un normale Button. Cliccando sul bottone PDF con HyperlinkButton IE non blocca un bel nulla, e fa apparire il classico dialog Apri/Salva.

Ora, però, fate un passettino in avanti: supponiamo che l’url venga generato dinamicamente. Voi cliccate, richiamato un qualcosa-lato-server che genera il PDF, e restituisce al client l’indirizzo http completo. Il controllo HyperlinkButton diventa (quasi) inutile: nello XAML non impostate la proprietà NavigateUri – perchè non la conoscete – voi cliccate ed ovviamente non succede un bel nulla. Nemmeno l’evento Click serve a qualcosa, perchè semplicemente non viene invocato.

E quindi? Se avete consigli, aiuti o qualche dritta, sono tutt’orecchi.

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.