Creare controlli server ASP.NET da zero

In questo tutorial, imparerai come creare un controllo server ASP.NET creando un controllo lettore video HTML5. Lungo la strada, esamineremo da zero il processo fondamentale dello sviluppo del controllo server.


introduzione

ASP.NET è dotato di un proprio set di controlli lato server, quindi perché creare il nostro?

Creando i nostri controlli, possiamo quindi costruire componenti visivi potenti e riutilizzabili per l'interfaccia utente della nostra applicazione Web.

Questo tutorial ti introdurrà al processo di sviluppo del controllo server ASP.NET. Vedrai anche come la creazione di controlli personalizzati può contemporaneamente migliorare la qualità delle tue applicazioni Web, renderti più produttivo e migliorare le tue interfacce utente.

I controlli personalizzati ASP.NET sono più flessibili dei controlli utente. Possiamo creare un controllo personalizzato che eredita da un altro controllo lato server e quindi estendere tale controllo. Possiamo anche condividere un controllo personalizzato tra i progetti. In genere, creeremo il nostro controllo personalizzato in una libreria di controllo web personalizzata che viene compilata separatamente dalla nostra applicazione web. Di conseguenza, possiamo aggiungere quella libreria a qualsiasi progetto per utilizzare il nostro controllo personalizzato in quel progetto.


Panoramica video HTML5

Fino ad ora, non c'è mai stato un modo nativo per visualizzare i video su una pagina web. Oggi, la maggior parte dei video viene mostrata, tramite l'uso di un plugin (come Flash o Silverlight). Tuttavia, non tutti i browser hanno gli stessi plugin. HTML5 specifica un modo standard e nativo per includere il video con video elemento.

Attualmente, ci sono due formati video ampiamente supportati per l'elemento video: Ogg file [codificati con Theora e Vorbis rispettivamente per video e audio] e MPEG 4 file [codificati con H.264 e AAC].

Per mostrare un video in HTML5, questo è tutto ciò di cui abbiamo bisogno:

Il controlli l'attributo è per l'aggiunta giocare, pausa e volume controlli. Senza questo attributo, il tuo video sembrerebbe essere solo un'immagine. È anche sempre una buona idea includere entrambi larghezza e altezza attributi. La seguente tabella mostra tutti gli attributi di elemento:

  • riproduzione automatica: Specifica che il video inizierà a essere riprodotto non appena sarà pronto
  • controlli: Specifica che verranno visualizzati i controlli, ad esempio un pulsante di riproduzione
  • altezza: L'altezza del video player
  • ciclo continuo: Specifica che il file multimediale verrà riavviato ogni volta che viene completato
  • precarico: Specifica che il video verrà caricato al caricamento della pagina e pronto per essere eseguito. Ignorato se è presente "autoplay"
  • src: L'URL del video da riprodurre
  • larghezza: La larghezza del video player
  • manifesto: L'URL dell'immagine da mostrare quando non sono disponibili dati video

Passaggio 0: Introduzione

Tutto ciò che è necessario per iniziare è una copia di Visual Studio di Visual Web Developer Express. Se non si dispone della versione completa di Visual Studio, è possibile utilizzare l'Express Edition gratuita.

Il video player HTML5 che creeremo qui è solo un semplice lettore video che renderà qualsiasi interfaccia nativa fornita dal browser. I browser che supportano i video HTML5 incorporano i lettori video, incluso un set di controlli (riproduzione / pausa ecc.), In modo che vedrai un'interfaccia diversa per ciascun browser quando esegui questo controllo.

Il player video HTML5 in Firefox 3.6.8.

Passaggio 1: creazione di un progetto di controllo personalizzato

Per prima cosa, dobbiamo creare un nuovo progetto di libreria di classi per contenere i nostri controlli personalizzati. Creando il controllo personalizzato in una libreria di classi separata, possiamo compilare il progetto in una DLL separata e utilizzare il controllo personalizzato in qualsiasi applicazione che lo richiede.

Apri il tuo progetto ASP.NET con Visual Studio o Visual Web Developer. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome della soluzione e selezionare Aggiungi nuovo progetto dal menu di scelta rapida. Nella finestra di dialogo Aggiungi nuovo progetto, selezionare il tipo di progetto da a web progetto e selezionare Controllo server ASP.NET come il modello, in questo modo:

Assegna un nome al progetto CustomControls. Clic ok. Viene creato il nuovo progetto Controllo server ASP.NET e Visual Studio fornisce anche un semplice controllo Web per iniziare. Elimina questo controllo personalizzato perché non ne abbiamo bisogno.


Passaggio 2: aggiunta di un controllo personalizzato Web al progetto

In Esplora soluzioni, fare clic con il tasto destro del mouse su CustomControls progetto e selezionare Aggiungi un nuovo elemento dal menu di scelta rapida. Nel Aggiungi un nuovo elemento finestra di dialogo, scegliere il tipo di categoria da a web categoria e selezionare Controllo server ASP.NET nei modelli.

Assegna un nome al nuovo controllo personalizzato Lettore video. Clic Inserisci. Il nuovo controllo personalizzato (VideoPlayer.cs) viene creato e aggiunto al progetto CustomControls.

usando il sistema; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; usando System.Web; usando System.Web.UI; utilizzando System.Web.UI.WebControls; namespace CustomControls [DefaultProperty ("Text")] [ToolboxData ("<0:VideoPlayer runat=server>")] public class VideoPlayer: WebControl [Bindable (true)] [Categoria (" Appearance ")] [DefaultValue (" ")] [Localizable (true)] public string Testo get String s = (String) ViewState [ "Testo"]; return ((s == null)? "[" + This.ID + "]": s); set ViewState ["Text"] = valore; override protetto RenderContents (output HtmlTextWriter ) output.Write (testo); 

Il codice sopra è il codice predefinito generato da Visual Studio per una libreria di controllo web. Per iniziare a lavorare con VideoPlayer.cs, dobbiamo modificare il codice qui sopra. La prima cosa che dovremmo fare è cancellare tutto tra la riga di dichiarazione della classe e la fine della classe. Questo ci lascia con questo codice:

usando il sistema; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; usando System.Web; usando System.Web.UI; utilizzando System.Web.UI.WebControls; namespace CustomControls [DefaultProperty ("Text")] [ToolboxData ("<0:VideoPlayer runat=server>")] publicPlayer VideoPlayer: WebControl  

Come vedi sopra, il Lettore video la classe deriva dal System.Web.UI.WebControl classe. Infatti, tutti i controlli lato server ASP.NET derivano da WebControl classe.


Passaggio 3: modifica della riga di dichiarazione di classe

La riga di dichiarazione di classe nel codice predefinito specifica anche la proprietà predefinita per Lettore video controllo come il Testo proprietà. Il Lettore video il controllo che creiamo qui non ha una proprietà chiamata Testo. Quindi, elimina il riferimento a Testo come la proprietà predefinita. Dopo tutte le modifiche, il VideoPlayer.cs il file di codice dovrebbe assomigliare a questo:

usando il sistema; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; usando System.Web; usando System.Web.UI; utilizzando System.Web.UI.WebControls; namespace CustomControls [ToolboxData ("<0:VideoPlayer runat=server>")] publicPlayer VideoPlayer: WebControl  

Passaggio 4: aggiunta di proprietà

In questo passaggio, aggiungeremo alcune proprietà al controllo di VideoPlayer per gestire il comportamento del controllo. Quello che segue è l'elenco delle proprietà che aggiungeremo al VideoPlayer.cs file di codice:

  • videoURL: Una proprietà stringa che specifica l'URL del video da riprodurre.
  • PosterUrl: Una proprietà stringa che specifica l'indirizzo di un file immagine da mostrare quando non sono disponibili dati video.
  • Riproduzione automatica: Una proprietà booleana per specificare se il video deve iniziare automaticamente a giocare o meno, quando viene aperta la pagina web.
  • DisplayControlButtons: Una proprietà booleana che specifica se i pulsanti di navigazione del lettore sono visualizzati o meno.
  • Ciclo continuo: Una proprietà booleana che specifica se il video verrà riavviato o meno, ogni volta che viene completato.

Aggiungi il seguente codice alla classe VideoPlayer:

stringa privata _Mp4Url; public string Mp4Url get return _Mp4Url;  set _Mp4Url = value;  stringa privata _OggUrl = null; stringa pubblica OggUrl get return _OggUrl;  set _OggUrl = value;  stringa privata _Poster = null; public string PosterUrl get return _Poster;  imposta _Poster = valore;  private bool _AutoPlay = false; public bool AutoPlay get return _AutoPlay;  set _AutoPlay = valore;  bool privato _Controls = true; public bool DisplayControlButtons get return _Controls;  imposta _Controls = valore;  bool privato _Loop = falso; bool pubblico Loop get return _Loop;  imposta _Loop = valore;  

Dopo aver aggiunto le proprietà di cui sopra, dovrebbe apparire la classe VideoPlayer

usando il sistema; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; usando System.Web; usando System.Web.UI; utilizzando System.Web.UI.WebControls; namespace CustomControls [ToolboxData ("<0:VideoPlayer runat=server>")] public class VideoPlayer: WebControl stringa privata _Mp4Url; stringa pubblica Mp4Url get return _Mp4Url; set _Mp4Url = value; stringa privata _OggUrl = null; stringa pubblica OggUrl get return _OggUrl; set _OggUrl = valore; stringa privata _Poster = null; stringa pubblica PosterUrl get return _Poster; set _Poster = value; bool privato _AutoPlay = false; public bool AutoPlay get return _AutoPlay; set _AutoPlay = value ; bool privato _Controls = true; bool pubblico DisplayControlButtons get return _Controls; set _Controls = value; bool privato _Loop = false; bool pubblico Loop get return _Loop; set _Loop = value;  

Passaggio 5: creazione del metodo RenderContents

Il compito principale di un controllo server è di rendere un certo tipo di linguaggio di markup al flusso di output HTTP, che viene restituito e visualizzato dal client. È nostra responsabilità, in qualità di sviluppatore del controllo, comunicare al server quale markup rendere. L'override RenderContents metodo è la posizione principale in cui diciamo al controllo ciò che vogliamo rendere al client.

Aggiungi la seguente sostituzione RenderContents metodo per il Lettore video classe:

protetto override void RenderContents (output HtmlTextWriter)  

Si noti che il RenderContents metodo ha un parametro di metodo chiamato produzione. Questo parametro è un HtmlTextWriter oggetto, che è ciò che il controllo utilizza per rendere HTML al client. Il HtmlTextWriter class ha un numero di metodi che puoi usare per rendere il tuo HTML, incluso Aggiungi attributo e RenderBeginTag.


Passaggio 6: aggiunta degli attributi dei tag

Prima di scrivere il codice per rendere il elemento, la prima cosa da fare è aggiungere alcuni attributi per questo. Possiamo usare il Aggiungi attributo metodo del HtmlTextWriter oggetto di aggiungere attributi per tag HTML.

Aggiungere il seguente codice nel RenderContents metodo:

output.AddAttribute (HtmlTextWriterAttribute.Id, this.ID); output.AddAttribute (HtmlTextWriterAttribute.Width, this.Width.ToString ()); output.AddAttribute (HtmlTextWriterAttribute.Height, this.Height.ToString ()); if (DisplayControlButtons == true) output.AddAttribute ("controls", "controls");  if (PosterUrl! = null) output.AddAttribute ("poster", PosterUrl);  if (AutoPlay == true) output.AddAttribute ("autoplay", "autoplay");  if (Loop == true) output.AddAttribute ("loop", "loop");  

Puoi vederlo, usando il Aggiungi attributo metodo, abbiamo aggiunto sette attributi al tag. Notare anche che stiamo usando un'enumerazione, HtmlTextWriterAttribute, per selezionare l'attributo che vogliamo aggiungere al tag.

Dopo aver aggiunto il codice sopra, il RenderContents il metodo dovrebbe apparire così:

protetto override void RenderContents (output HtmlTextWriter) output.AddAttribute (HtmlTextWriterAttribute.Id, this.ID); output.AddAttribute (HtmlTextWriterAttribute.Width, this.Width.ToString ()); output.AddAttribute (HtmlTextWriterAttribute.Height, this.Height.ToString ()); if (DisplayControlButtons == true) output.AddAttribute ("controls", "controls");  if (PosterUrl! = null) output.AddAttribute ("poster", PosterUrl);  if (AutoPlay == true) output.AddAttribute ("autoplay", "autoplay");  if (Loop == true) output.AddAttribute ("loop", "loop");  

Passaggio 7: Rendering del

Dopo aver aggiunto alcuni attributi di tag per l'elemento video, è ora di eseguire il rendering di tag con i suoi attributi sul documento HTML. Aggiungi il seguente codice nel RenderContents metodo:

output.RenderBeginTag ( "video"); if (OggUrl! = null) output.AddAttribute ("src", OggUrl); output.AddAttribute ("type", "video / ogg"); output.RenderBeginTag ( "source"); output.RenderEndTag ();  if (Mp4Url! = null) output.AddAttribute ("src", Mp4Url); output.AddAttribute ("type", "video / mp4"); output.RenderBeginTag ( "source"); output.RenderEndTag ();  output.RenderEndTag (); 

Noi usiamo il RenderBeginTag metodo di produzione oggetto per rendere il tag di apertura dell'elemento video, e RenderEndTag per rendere il suo tag di chiusura. Abbiamo anche aggiunto il elemento tra il elemento. L'elemento video consente più elementi di origine. fonte gli elementi possono collegarsi a diversi file video. Il browser utilizzerà il primo formato riconosciuto.

Il RenderContents il metodo dovrebbe apparire così dopo aver aggiunto il codice sopra:

protetto override void RenderContents (output HtmlTextWriter) output.AddAttribute (HtmlTextWriterAttribute.Id, this.ID); output.AddAttribute (HtmlTextWriterAttribute.Width, this.Width.ToString ()); output.AddAttribute (HtmlTextWriterAttribute.Height, this.Height.ToString ()); if (DisplayControlButtons == true) output.AddAttribute ("controls", "controls");  if (PosterUrl! = null) output.AddAttribute ("poster", PosterUrl);  if (AutoPlay == true) output.AddAttribute ("autoplay", "autoplay");  if (Loop == true) output.AddAttribute ("loop", "loop");  output.RenderBeginTag ("video"); if (OggUrl! = null) output.AddAttribute ("src", OggUrl); output.AddAttribute ("type", "video / ogg"); output.RenderBeginTag ( "source"); output.RenderEndTag ();  if (Mp4Url! = null) output.AddAttribute ("src", Mp4Url); output.AddAttribute ("type", "video / mp4"); output.RenderBeginTag ( "source"); output.RenderEndTag ();  output.RenderEndTag ();  

Si noti che l'ordine in cui posizioniamo il AddAttributes i metodi sono importanti Inseriamo il AddAttributes metodi direttamente prima del RenderBeginTag metodo nel codice. Il AddAttributes metodo associa gli attributi con il prossimo tag HTML che viene reso dal RenderBeginTag metodo, in questo caso il video etichetta.


Passaggio 8: rimozione del tag span

Per impostazione predefinita, ASP.NET circonda il tag di controllo con a elemento durante il rendering del markup HTML del controllo. Se abbiamo fornito un ID valore per il nostro controllo, quindi il campata il tag renderà anche, per impostazione predefinita, un ID attributo. Avere i tag a volte può essere problematico, quindi se vogliamo evitare questo in ASP.NET, possiamo semplicemente ignorare il rendere metodo e chiama il RenderContents metodo direttamente. Ecco come farlo:

protected override void Render (HtmlTextWriter writer) this.RenderContents (writer);  

Dopo aver aggiunto il codice sopra, la classe VideoPlayer dovrebbe assomigliare a questa:

usando il sistema; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; usando System.Web; usando System.Web.UI; utilizzando System.Web.UI.WebControls; namespace CustomControls [ToolboxData ("<0:VideoPlayer runat=server>")] public class VideoPlayer: WebControl stringa privata _Mp4Url; stringa pubblica Mp4Url get return _Mp4Url; set _Mp4Url = value; stringa privata _OggUrl = null; stringa pubblica OggUrl get return _OggUrl; set _OggUrl = valore; stringa privata _Poster = null; stringa pubblica PosterUrl get return _Poster; set _Poster = value; bool privato _AutoPlay = false; public bool AutoPlay get return _AutoPlay; set _AutoPlay = value ; bool privato _Controls = true; bool pubblico DisplayControlButtons get return _Controls; set _Controls = value; bool privato _Loop = false; bool pubblico Loop get return _Loop; set _Loop = value;  override protetto RenderContents (output HtmlTextWriter) output.AddAttribute (HtmlTextWriterAttribute.Id, this.ID); output.AddAttribute (HtmlTextWriterAttribute.Width, this.Width.ToString ()); output.AddAttribute (HtmlTextWriterAttribute.Height, this. Height.ToString ()); if (DisplayControlButtons == true) output.A ddAttribute ("controls", "controls");  if (PosterUrl! = null) output.AddAttribute ("poster", PosterUrl);  if (AutoPlay == true) output.AddAttribute ("autoplay", "autoplay");  if (Loop == true) output.AddAttribute ("loop", "loop");  output.RenderBeginTag ("video"); if (OggUrl! = null) output.AddAttribute ("src", OggUrl); output.AddAttribute ("type", "video / ogg"); output.RenderBeginTag ( "source"); output.RenderEndTag ();  if (Mp4Url! = null) output.AddAttribute ("src", Mp4Url); output.AddAttribute ("type", "video / mp4"); output.RenderBeginTag ( "source"); output.RenderEndTag ();  output.RenderEndTag ();  protected override void Render (HtmlTextWriter writer) this.RenderContents (writer);  

Il nostro controllo è ora finito! Tutto ciò che resta da fare è creare il progetto prima di utilizzarlo su una pagina Web ASP.NET.


Passaggio 9: creazione del progetto

È tempo di costruire il progetto. Selezionare Costruire, e quindi fare clic Build Solution dal menu principale.

Dopo aver creato il progetto, il passo successivo è aggiungere il controllo VideoPlayer nel Toolbox Explorer.


Passaggio 10: aggiunta del controllo di VideoPlayer a Visual Studio Toolbox

  • Per aggiungere il controllo VideoPlayer alla casella degli strumenti, fare clic con il tasto destro del mouse su Toolbox Explorer
  • Scegli articoli dal menu di scelta rapida
  • Clicca il Navigare pulsante nella finestra di dialogo Scegli elementi della casella degli strumenti
  • Passare alla directory del progetto ASP.NET
  • Vai al CustomControls elenco
  • Apri il Bin \ Debug directory (Visual Studio crea versioni di debug per impostazione predefinita).
  • Seleziona il CustomControls.DLL assemblea e clicca sul Aperto pulsante

Lettore video apparirà nella finestra di dialogo Scegli elementi degli strumenti come mostrato nell'immagine sopra. La casella di controllo lo mostrerà come selezionato. Non appena fai clic sul ok nella finestra di dialogo Scegli elementi della casella degli strumenti, il nuovo controllo di VideoPlayer verrà visualizzato nella casella degli strumenti.


Passaggio 11: Posizionamento del controllo VideoPlayer nella pagina Web ASP.NET

Per vedere come funziona il controllo, dobbiamo dargli una casa. Aggiungi una nuova pagina al sito web. Fare clic con il pulsante destro del mouse sul progetto ASP.NET da Esplora soluzioni. Selezionare Aggiungi un nuovo elemento, e aggiungere un Modulo Web. Denominare il modulo Web VideoPlayerTest.aspx.

Per posizionare il controllo sulla pagina, passare a Design modalità. Trascina il Lettore video controllo dalla casella degli strumenti e rilasciarlo sul VideoPlayerTest.aspx vista di progettazione.

Il seguente elenco mostra come viene dichiarato il controllo sulla pagina:

La seguente riga di codice è ciò che Visual Studio ha aggiunto a ASPX file per ospitare il controllo. Puoi vederlo selezionando il fonte scheda dalla parte inferiore della finestra del codice in Visual Studio. Il Registrare direttiva dice al runtime ASP.NET dove trovare il controllo personalizzato (quale assieme) e mapparlo a un prefisso di tag.

<%@ Register assembly="CustomControls" namespace="CustomControls" tagprefix="cc1" %>

Ora possiamo testare il controllo.

Controllo di VideoPlayer in esecuzione su Google Chrome.

Sommario

In questo tutorial, hai imparato come creare da zero il tuo controllo server personalizzato ASP.NET. Ora conosci ogni fase del processo: da come creare un progetto di libreria di controllo personalizzato Web, come aggiungere proprietà a un controllo personalizzato, come rendere il markup HTML del controllo al client e, infine, come utilizzare il Controllo personalizzato ASP.NET in un modulo Web.

Si spera che ora abbiate le competenze per creare controlli personalizzati che abbiano tutte le funzionalità dei controlli standard sul lato server di ASP.NET. Grazie mille per la lettura!