Compartilhar via


Conjuntos de modelo e modelos de controles

O ASP.NET fornece controles modelados que expõem várias propriedades de modelo que definem o conteúdo e layout do controle.Esses modelos são inseridos nos locais apropriados durante o renderização do controle.Por exemplo, existem modelos para o List controle, sistema autônomo modelos de cabeçalho e rodapé. Esse recurso permite que você personalize a aparência dos controles em time de execução, com base no dispositivo de significativamente.

Controles móveis do ASP.NET estendem esse modelo e introduzem a noção de conjuntos de modelo.Um conjunto de modelos é uma coleção de modelos.No entanto, um único controle modelo pode Consulte vários conjuntos de modelos, com cada conjunto de modelos tendo diferentes dispositivo-critérios específicos.

Critérios de renderização para conjuntos de modelo

Cada conjunto de modelos de um controle modelo está contido em um <choice> elemento dentro de um compartilhada <devicespecific> elemento.Em time de execução, as opções no <DeviceSpecific> elemento são avaliadas na ordem. O primeiro correspondente <Choice> elemento é usado para conteúdo específico do dispositivo. Se a opção selecionada contém modelos, o controle usa-los.Se nenhum modelo for encontrado, ou se nenhuma das opções especificadas é apropriada, o controle apresenta sua marcação padrão.

Modelos independentes de dispositivo

Qualquer controle modelo pode ter um modelo independente de dispositivo.Para especificar modelos independentes de dispositivo, use um <choice> elemento sem uma explícita Filter atributo. Uma opção independente de dispositivo, onde especificados, deve ser sempre a última opção declarada, para que ele é selecionado se não há outras opções se aplicam ao dispositivo de destino.

renderização de controle específicos

O comportamento de renderização de controles no modo de modelo é específico para o controle.Alguns controles, sistema autônomo List e ObjectList, pode processar todos sistema autônomo seus conteúdos dos modelos fornecidos. Outros controles podem adicionar o Sumário dos modelos específicos para seu Sumário padrão.Por exemplo, se um modelo de cabeçalho ou rodapé está selecionado para o Form controle, a marcação contida no modelo é adicionado ao Sumário do formulário sistema autônomo um cabeçalho ou rodapé, respectivamente.

Definindo propriedades para um controle modelo

Para conjunto propriedades de um controle de forma programática em um modelo, você deve obter uma referência para o contêiner de nomenclatura e usar o FindControl método para localizar o controle. Em seguida, você pode conjunto suas propriedades.O exemplo a seguir ilustra essa técnica.

Observação:

Porque o estilo informações da folha é carregados antes Quando Você pode alterar programaticamente o StyleReference propriedade, alterá-lo no código não tem efeito.

void Page_Load(Object sender, EventArgs e)
{
    // Iterate through the controls in the form.
    foreach(Control c in Form1.Controls)
    {
        if(c.GetType()) == typeof(TemplateContainer)
        {
            // Get the link control.
            Link ctrl = (Link)c.FindControl("myLink");
            if (ctrl != null)
            {
                // Set the text and url properties.
                ctrl.Text = "Home Page";
                ctrl.NavigateURL = "https://www.microsoft.com";
            }
        }
    }
}

Conjuntos de modelo e estilos

Estilos em um StyleSheet controle também pode conter conjuntos de modelo. Assim, você pode fazer com modelo de vários controles que o mesmo estilo de referência, usam os mesmos conjuntos de modelo e oferecem os mesmos benefícios de encapsulamento que fornece um estilo.Para obter um exemplo que ilustra o modelo de conjuntos, consulte QuickStart de controles móveis do ASP.NET.

Estilo modelos vs.Propriedades de estilo

Você pode herdar um estilo de um pai, você pode conjunto explicitamente o StyleReference propriedade ou você pode herdar o estilo através de agregação. Com modelos, no entanto, há efeito em cascata.Você não poderá recuperar um modelo de um modelo de estilo pai, a menos que você use um modelo em uma folha de estilos.Para obter mais informações, consulte Estilos.

Modelos dinamicamente adicionados

Em alguns cenários avançados, é útil criar uma instância e adicionar modelos dinamicamente.O exemplo de código a seguir adiciona modelos em um Init manipulador de eventos.

<%@ Page Language="C#" 
    Inherits="System.Web.UI.MobileControls.MobilePage" %>
<script >
    private void Form_Init(object sender, System.EventArgs e)
    {
        DeviceSpecific devSpecific = new DeviceSpecific();

        // Create the choice tag.
        DeviceSpecificChoice devChoice = 
            new DeviceSpecificChoice();
        devChoice.Filter = "isHTML32";

        // Create the template.
        ITemplate myTemplate = 
            new CustomTemplate("HeaderTemplate");

        // Create the templateContainer.
        TemplateContainer container = new TemplateContainer();
        myTemplate.InstantiateIn(container);

        // Create the tree.
        devChoice.Templates.Add("HeaderTemplate", myTemplate);
        ((IParserAccessor)devSpecific).AddParsedSubObject(devChoice);
        ((IParserAccessor)form1).AddParsedSubObject(devSpecific);
    }
    public class CustomTemplate : ITemplate
    {
        String strWhichTemplate;

        public CustomTemplate(String strTemplate)
        {
            strWhichTemplate = strTemplate;
        }

        public void InstantiateIn(Control container)
        {
            if (strWhichTemplate == "HeaderTemplate")
            {
                System.Web.UI.MobileControls.Label lb =
                    new System.Web.UI.MobileControls.Label();
                lb.Text = "Header Template";

                System.Web.UI.MobileControls.Command cmd = 
                    new System.Web.UI.MobileControls.Command();
                cmd.Text = "heLLo";

                container.Controls.Add(lb);
                container.Controls.Add(cmd);
            }
            else if (strWhichTemplate == "FooterTemplate")
            {
                System.Web.UI.MobileControls.Label lb = 
                    new System.Web.UI.MobileControls.Label();
                lb.Text = "FooterTemplate";
                container.Controls.Add(lb);
            }
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
  <mobile:form id="form1"  OnInit="Form_Init">
  </mobile:form>
</body>
</html>

Considerações especiais para usando modelos específicos de dispositivos

Quando a combinação de linguagens de marcação específica do dispositivo com os controles móveis, você deve garantir consistência, com base nos quais os controles móveis são renderização.Não há suporte para detecção inteligente e adaptação de marcações específicas do dispositivo e independentes de dispositivo mista.

Por exemplo, observe o alignment a primeira configuração Panel controle e o Label controlar no exemplo de código a seguir:

<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>

WML <p> os elementos são usados para processar o alinhamento de não-padrão. No exemplo anterior, o segundo Label controle está dentro de um WML <td> elemento e o <p> gerado para o segundo elemento Label controle incorretamente é processado pelo navegador porque ele está localizado dentro do <td> elemento.

Nesse caso, a Label controle não herdar o alinhamento da primeira Panel controlar, para que ele gera um <p> marca para seu alinhamento. No entanto, um <p> marca não pode ser adicionada nessa situação. Isso não é uma situação comum, mas você pode contornar o problema, marcando o Label controle sistema autônomo visível se o dispositivo de destino não é baseado em WML e tornando o texto dos Label controle especificado no modelo.

Arbitrário dispositivos específicos marcação

Em alguns casos, convém inserir marcação arbitrária para um dispositivo específico ou o tipo de dispositivo.Para habilitar isso, páginas da Web móveis ASP.NET fornecem um modelo de conteúdo para o Panel controle. Se uma opção selecionada contém um modelo de Sumário, o controle processa usando o modelo em vez de seu Sumário normal.

Consulte também

Conceitos

Estilos

Suporte de modelo do dispositivo

Outros recursos

Guia do desenvolvedor do aplicativo

Desenvolvimento de páginas de Web móveis do ASP.NET

Design e conceitos de renderização para controles móveis do ASP.NET