Utilizzo di modelli specifici di dispositivo
Quando si uniscono linguaggi con tag specifici di dispositivo ai controlli mobili ASP .NET, è necessario assicurare la congruenza in base agli elementi di cui i controlli mobili eseguono il rendering. Il rilevamento e l'adattamento intelligente per tag misti specifici di dispositivo e indipendenti dal dispositivo non è supportato.
Nell'esempio non corretto che segue, il contenuto dei tag <ContentTemplate> viene inviato al dispositivo se il filtro corrisponde alla relativa funzionalità. Osservare l'impostazione alignment
nel primo controllo Panel e il controllo Label. Poiché il controllo Label è all'interno di un tag WML <td>, il rendering del tag <p> generato per il controllo Label viene eseguito in modo non corretto dal browser in quanto è all'interno del tag <td>.
<mobile:Panel runat=server alignment="right">
<DeviceSpecific>
<Choice Filter="isWML11">
<ContentTemplate>
<table columns="2" align="LR">
<tr>
<td>
</ContentTemplate>
</Choice></Devicespecific>
</mobile:panel>
<Mobile:Label id="label1" runat=server Text="HELLO HOW ARE YOU"
alignment="left">
</Mobile:Label>
<mobile:Panel runat=server>
<DeviceSpecific>
<Choice Filter="isWML11">
<ContentTemplate>
</td>
<td>
</ContentTemplate>
</Choice>
</Devicespecific>
</mobile:panel>
Una volta selezionata un'impostazione non predefinita per l'allineamento, viene generato un tag <p> per ogni controllo successivo. Viene generato l'errore seguente:
Digest Compile failed.
WML_1.1.DTD(9) : error: Close tag 'p' does not match start tag 'td'
WML_1.1.DTD(9) : error: Invalid element 'p' in content of 'tr'.
Expected td
WML_1.1.DTD(9) : error: Invalid element 'p' in content of 'tr'. Expected td
WML_1.1.DTD(10) : error: Close tag 'td' does not match start tag 'p'
In tal caso il controllo Label non eredita l'allineamento dal primo controllo Panel, pertanto genera un tag <p> per l'allineamento. Tuttavia non è possibile aggiungere un tag <p> in questa situazione. Non si tratta di una situazione usuale ma è possibile eludere il problema contrassegnando il controllo Label come visibile solo se non viene eseguito il rendering in un dispositivo basato su WML e specificando il controllo Label nel modello. Per il rendering WML, utilizzare il tag <table align="left"> nel controllo Panel.
Nota È possibile controllare l'allineamento generale di una tabella ma non quello di singole celle.
Esempio corretto
Nell'esempio che segue vengono corretti gli errori precedenti e vengono inserite aggiunte quali direttive di pagina e controlli di form.
<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage" Language ="c#" %>
<Mobile:Form runat=server ID="OrderForm" Title="Submit your Order For pizza">
<Mobile:link runat=server ID="LinkWN1" Text="What's On" Alignment="center">
</Mobile:link>
<mobile:Panel runat=server>
<DeviceSpecific>
<Choice Filter="isWML11">
<ContentTemplate>
<table columns="2"
align="LR">
<tr><td>
</ContentTemplate>
</Choice>
</Devicespecific>
</mobile:panel>
<Mobile:Label id="label1" runat=server
Text="HELLO HOW ARE YOU">
</Mobile:Label>
<mobile:Panel runat=server>
<DeviceSpecific>
<Choice Filter="isWML11">
<ContentTemplate>
</td><td>
</ContentTemplate>
</Choice>
</Devicespecific>
</mobile:panel>
<mobile:Panel runat=server>
<DeviceSpecific>
<Choice Filter="isWML11">
<ContentTemplate>
</td></tr>
</table>
</ContentTemplate>
</Choice>
</Devicespecific>
</mobile:panel>
</Mobile:Form>
<Mobile:Form runat=server ID="WhatisOn" Title="Contains">
<Mobile:Label StyleReference="Title" ID="LblWO2" runat=server Text="Toppings"></Mobile:Label>
</Mobile:Form>
Vedere anche
Attributi personalizzati | Suggerimenti per l'applicazione di filtri di dispositivo | Metodo HasCapability | Metodi di valutazione di dispositivi | Funzionalità estese del browser | MobileControl | Informazioni sulle regole del mapping dei dati per il provider di configurazione