Riutilizzare un UserControl

di Marco Leoncini, in asp.net,

visto che ci sono ne approfitto per rinnovare i complimenti hai ragazzi che anno dato vita ad un evento veramente bello, naturalmente parlo del Real Code Day.
putroppo dopo l'evento non sono rimasto a cena con loro, vuoi per la stanchezza accumulata, vuoi perche in fondo sono schivo di carattere e dal vivo ci metto un bel pò per socializzare...se volete sapere con cosa ho sostituito una divertentissima cena continuate a leggere...

quante volte nei forum appare la domanda amletica, UserControl o WebControl questo è il problema... i pro e i contro li sappiamo a memoria.
l'UserControl è rapido da sviluppare, ma difficile da distribuire e scarsamente riutilizzabile, i WebControl richiedono più tempo ma pachettizzati in una dll sono facilissimi da distribuire e da riutilizzare in più progetti.
questo diventa parzialmente vero con l'arrivo di asp.net 2.0
prendendo spunto, ma sarebbe più giusto dire, traducendo con licenza poetica, dal post di Scott Allen .il nuovo ambiente di sviluppo ci mette a disposizione MSBuild e ASP compiler, questo di permetterà di pacchettizzare i nostri UserControl in una dll.
seguo un percoso leggermente differente da Scott Allen , fatto dovuto, con tutta probabilità alla diversita di vesione del VS 2005.
per chi ha la Beta 2 i passi sono questi:
create una nuova soluzione, aggiungete una libreria di classi e un sito web.
aggiungete al sito uno o più UserControl, dopodoche trascinateli nel progetto contenente la libreria di classe, una volta copiate potete cancellarli dal sito web.
fatto questo potremo lavorare con i vostri UserControl come siamo abituati normalmente, visto che l'itellisense del VS 2005 è stupefacente, funzionerà senze problemi, anche non trovandosi in una soluzione web.

<%@ Control Language="C#" ClassName="Footer" %> 
<script runat="server"> 
public string FooterText 
{ 
get 
{ return label.Text; } 
set { label.Text = value; }
} 
</script>
<asp:Label runat="server" ID="label"></asp:Label>


localizzate la cartella che contiene il progetto della libreria di classi, cercate il file nomeProgetto.csproj (di fatto è un progetto MSBuild) e apriamiamolo con il fido notepad.
tra i tag <Project> aggiungiamo

<Target Name="Build"> 
<AspNetCompiler 
Debug="false" 
PhysicalPath="$(MSBuildProjectDirectory)" 
TargetPath="C:\Documents and Settings\marco\Desktop\temp" 
Updateable="false" Force="true" 
VirtualPath="$(MSBuildProjectName)" /> 
</Target> 


visto che la libreria di classi non sa che farsene del file ascx, utilizzeremo Asp Compiler, gli diciamo dove pescare i file, e dove mettere la dll una volta compilata.
nella directory bin troveremo un file tipo questo App_Web_b7lwr6fb.dll, torniamo al sito web e aggiungiamo il riferimento a questa dll.
usiamo la direttiva @Register come siamo abituati a fare con i WebControl:

<%@ Register TagPrefix="ruc" Namespace="ASP" Assembly="App_Web_b7lwr6fb" %>

specificando il namespace ASP creato di default dal compilatore, ed infine nella pagina web

<ruc:Footer runat="server" ID="footer"></ruc:Footer>

nel codice

protected void Page_Load(object sender, EventArgs e) 
{  
footer.FooterText = "questo è il footer"; 
}

ci sono alcune osservazioni da fare, partiamo dalla compilazione, UserControl in cartelle differenti, generano assembly separati, questo ci creerà qualche grattacapo, risolvibile con
ILMerge che come suggerisce il nome, è nato per fondere assembly differenti.
contro questo tipo di utilizzo dell'UserControl pesa ancora la mancanza del supporto a DesignTime, ma se ne potete fare a meno...

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese