Controlli utente
I controlli utente mobili ASP .NET consentono di creare un controllo utente personalizzato in una pagina mobile ASP .NET in modo rapido ed efficiente. È possibile utilizzare i contenuti delle pagine mobili all'interno di un'altra pagina mobile componendo uno o più controlli con la relativa logica associata e incapsulandoli in un controllo utente. Il controllo utente è identico a un controllo MobilePage salvo qualche eccezione. Il controllo utente:
- Non richiede una direttiva di pagina.
- Deve avere l'estensione di file ASCX.
- Deve contenere la direttiva @ Register.
Per poter dichiarare i controlli mobili nel controllo utente, la direttiva @ Register associa gli alias agli spazi dei nomi e alle classi. Per ulteriori informazioni, vedere @Register.
ASP .NET consente di distinguere tra i controlli utente e i controlli composti. Il controllo utente viene mantenuto in un file di testo ASCX, mentre il controllo composto viene compilato e mantenuto in un assembly. Nelle pagine Web Forms mobili di ASP .NET il controllo utente può contenere anche più controlli, come illustrato nella sezione riportata di seguito. Nell'esempio User Control che segue, viene utilizzato un controllo mobile elenco per creare un menu.
Considerazioni particolari per la creazione di controlli utente mobili
Quando si sviluppano i controlli utente per l'applicazione mobile, è necessario considerare i problemi riportati di seguito.
Utilizzo di stili predefiniti
Per un supporto degli stili completamente funzionale nei controlli utente quando si creano controlli utente mobili, è necessario che vengano derivati dalla classe MobileUserControl indicata nel file ASCX piuttosto che dalla classe System.Web.UI.UserControl standard, come illustrato nel codice che segue.
<%@ Control Inherits="System.Web.UI.MobileControls.MobileUserControl" Language="C#" %>
<%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile" %>
Influenza del percorso di Web.config sull'uso
In ASP .NET viene fatto riferimento alla directory della pagina attualmente in esecuzione per le informazioni di configurazione relative al controllo in uso. In questo modo se si dispone di filtri specifici di dispositivo o di altre informazioni definite in un file Web.config e memorizzate in un percorso diverso dalla directory in cui la pagina sarà eseguita, la configurazione non verrà trovata. Se, ad esempio, in una pagina in esecuzione nella directory corrente è incluso un controllo utente denominato Sales/Inventory.ascx
e un file Sales/Web.config si trova nella stessa directory Sales, nella pagina Inventory.ascx
non verrà elaborato il file Sales/Web.config. La configurazione verrà ottenuta dalla pagina in cui viene eseguito il controllo. Pertanto i filtri a cui è stato fatto riferimento in Inventory.ascx
ma definiti nel file Sales/Web.config, non saranno trovati o utilizzati.
Gestione di testo letterale nei controlli utente
Il testo in un controllo utente viene analizzato come System.Web.UI.LiteralControl e non come System.Web.UI.MobileControls.LiteralText. Il testo letterale eventualmente presente in un controllo utente viene visualizzato in tutte le pagine se il controllo utente contiene controlli con impaginazione interna, ad esempio Form. Per evitare questo problema, inserire il contenuto del controllo utente in un controllo Panel in modo che il testo venga analizzato dal framework della pagina ASP .NET e venga specificato come LiteralText.
<mobile:Panel runat=Server Paginate=true>
...
</mobile:Panel>
Creazione di un controllo utente
Un nuovo controllo utente viene creato generando un file con estensione ASCX. Nell'esempio di codice che segue è contenuto un controllo utente che utilizza più etichette per visualizzare le informazioni dettagliate relative a un'automobile.
<%@ Register TagPrefix="mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
// Car is a public field, of externally defined CarInfo type.
public CarInfo Car;
<mobile:Label id="Label1" runat="server">Make: <%# Car.Make %></mobile:Label>
<mobile:Label id="Label2" runat="server">Model: <%# Car.Model %></mobile:Label>
<mobile:Label id="Label3" runat="server">Year: <%# Car.Year %></mobile:Label>
<mobile:Label id="Label4" runat="server">Color: <%# Car.Color %></mobile:Label>
Quando la pagina viene eseguita in un dispositivo mobile, vengono visualizzati sullo schermo la marca, il modello, l'anno e il colore dell'automobile.
Distribuzione di un controllo utente
Una volta creato un controllo utente mobile, è possibile distribuirlo in due modi:registrandolo o caricandolo a livello di codice in una pagina mobile. Per registrare un controllo utente, utilizzare la direttiva @ Register; per caricare il controllo, utilizzare il metodo LoadControl. Nel codice che segue viene descritto come registrare il controllo.
<%-- Registers the control on the page. Car.ascx is the relative URL of the user control. --%>
<%@ Register TagPrefix="myCompany" TagName="CarCtl" Src="Car.ascx" %>
[C#]
// Add other code here.
// Binds the car object to the control declared
// in the following code.
myCarCtl.Car = car;
myCarCtl.DataBind();
// Add other code here.
<%-- Control declaration --%>
<myCompany:CarCtl id="myCarCtl" runat="server" />
In alternativa è possibile utilizzare il metodo LoadControl invece della direttiva @ Register, come illustrato nel codice riportato di seguito.
[C#]
// Use the LoadControl method.
CarCtl = LoadControl("Car.ascx")
Form.Controls.Add(CarCtl);
// Insert the remainder of the previous code here.
Risoluzione di URL
Quando si crea una pagina che accede a un controllo utente situato in una directory diversa da quella della pagina, tutti gli URL relativi nel controllo utente vengono risolti in relazione alla directory del controllo utente piuttosto che alla directory della pagina. Nell'elenco seguente viene descritto uno scenario tipico:
- L'indirizzo della pagina è /default.aspx.
- La pagina accede a un controllo utente situato in sottodir/UserControl.ascx.
- Nel controllo utente è contenuto un collegamento che fa riferimento al controllo utente b.ascx.
Il collegamento descritto nel presente scenario viene risolto in sottodir/b.ascx in quanto un controllo utente può incapsulare tutti i collegamenti o tutte le altre risorse relative che è possibile acquisire.
Gli URL seguenti vengono risolti in relazione a un controllo utente:
- Tutti gli URL di esplorazione, ad esempio gli URL per un controllo Link.
- Un URL di immagine in un controllo Image.
- Un URL di azione per un controllo Form.
Quando si scrivono i controlli o gli adattatori di controllo, è necessario assicurare la risoluzione degli URL relativi se necessario. È possibile scrivere i controlli e gli adattatori per chiamare il metodo ResolveUrl di un controllo mobile per risolvere un URL relativo alla directory della pagina o del controllo utente contenente il controllo. Alcuni metodi di supporto nelle classi base degli adattatori chiamano automaticamente il metodo ResolveUrl per risolvere i collegamenti ipertestuali.
Formattazione e collegamento nei controlli utente e nei riferimenti ai form
È possibile utilizzare alcuni controlli per il collegamento a un form nella stessa pagina utilizzando un URL che inizia con un simbolo di cancelletto (#) seguito dall'ID del form. Nell'esempio di codice che segue viene utilizzata la proprietà NavigateURL del controllo Link per specificare l'URL.
<mobile:Link runat="server"
id="Link1"
Text="Click here!"
NavigateURL="#Form2">
</mobile:Link>
In uno scenario tipico, un controllo utente è inserito in una pagina al primo livello, che può contenere uno o più form. I controlli presenti nella pagina e in ogni controllo utente possono fare riferimento ai form contenuti l'uno all'interno dell'altro in base alle seguenti indicazioni:
- Quando un controllo nella pagina fa riferimento a un form all'interno di un controllo utente figlio, nell'URL deve essere incluso l'ID univoco completo del form nel formato idcu:idform dove idcu è l'ID del controllo utente e idform è l'ID del form.
- Quando un controllo all'interno di un controllo utente fa riferimento a un form, quest'ultimo viene cercato prima nel controllo utente, poi nel relativo elemento padre e così via verso l'alto fino al livello di pagina.
Si supponga, ad esempio, la presenza di una pagina in cui sono contenuti due form i cui ID sono FormA e FormB. In questa pagina è contenuto inoltre un controllo utente di primo livello con l'ID Control1. Nel controllo utente sono contenuti due form aggiuntivi i cui ID sono FormA e FormC. Nella tabella che segue sono illustrati esempi di URL possibili e il relativo comportamento in relazione a questo scenario.
Posizione del controllo | URL del form | Comportamento |
---|---|---|
Nella pagina | #FormA | Collega a FormA nella pagina stessa. |
Nella pagina | #FormC | Genera un'eccezione in quanto nel form non sono contenuti form con l'ID specificato. |
Nella pagina | #Control1:FormA | Collega a FormA nel controllo utente. |
Nel controllo utente | #FormA | Collega a FormA nel controllo utente in quanto in ASP .NET la ricerca viene effettuata prima nel controllo utente stesso. |
Nel controllo utente | #FormB | Collega a FormB nella pagina in quanto in ASP .NET il riferimento al form viene risolto in relazione all'elemento padre del controllo utente. |
Vedere anche
Classe MobilePage | Controllo MobilePage | Creazione di un controllo utente User Control Example