Compartilhar via


Controles de Usuário

Controles de usuário móvel ASP.NET fornecem uma técnica rápida e eficiente para criar seu próprio controle de usuário em uma página da Web móvel do ASP.NET.Você pode usar o Sumário de qualquer página em outra página móvel móvel combinando um ou mais controles com sua lógica associada e, em seguida, encapsulando-os em um controle de usuário.Com poucas exceções, um controle de usuário é idêntico a um MobilePage controle.

Um controle de usuário para dispositivos móveis:

  • Deve ter uma extensão de nome de arquivo do ascx.

  • Does not require an @ Page directive.

  • Deve conter um @ Register diretiva.

The @ Register directive associates aliases with namespaces and classes, so that you can declare mobile controls in the user control.

ASP.NET faz a distinção entre controles de usuário e a composição de controles.Um controle de usuário é mantido sistema autônomo um arquivo de texto .ascx, enquanto um controle composto é compilado e mantido em um assembly.Em páginas da Web móveis ASP.NET, um controle de usuário pode conter vários controles, sistema autônomo demonstram sistema autônomo exemplos neste tópico.

Criando um controle de usuário

Você criar um novo controle de usuário criando um arquivo com uma extensão.ascx.O exemplo de código a seguir inclui um controle de usuário que usa várias etiquetas para exibir os detalhes de um carro.

<%@ Control Language="VB" ClassName="CarControl" 
    Inherits="System.Web.UI.MobileControls.MobileUserControl" %>
<%@ Register TagPrefix="mobile" 
    Namespace="System.Web.UI.MobileControls" 
    Assembly="System.Web.Mobile" %>

<script >
    ' Private field of externally defined CarInfo type
    Private _car As New CarInfo()

    ' Public Property for the CarInfo
    Public Property Car() As CarInfo
        Get
            Return _car
        End Get
        Set(ByVal value As CarInfo)
            _car = value
        End Set
    End Property
</script>

<mobile:Panel ID="Panel1" Runat="server" BreakAfter="true">
    <mobile:Label id="Label1"  BreakAfter="true">
        Make: <%# Car.Make %></mobile:Label>
    <mobile:Label id="Label2"  BreakAfter="true">
        Model: <%# Car.Model %></mobile:Label>
    <mobile:Label id="Label3"  BreakAfter="true">
        Year: <%# Car.Year %></mobile:Label>
    <mobile:Label id="Label4"  BreakAfter="true">
        Color: <%# Car.Color %></mobile:Label>
</mobile:Panel>
<%@ Control Language="C#" ClassName="CarControl" 
    Inherits="System.Web.UI.MobileControls.MobileUserControl" %>
<%@ Register TagPrefix="mobile" 
    Namespace="System.Web.UI.MobileControls" 
    Assembly="System.Web.Mobile" %>

<script >
    // Private field of externally defined CarInfo type
    private CarInfo _car = new CarInfo();

    // Public Property for the CarInfo
    public CarInfo Car
    {
        get { return _car; }
        set { _car = value; }
    }
</script>

<mobile:Panel ID="Panel1" Runat="server" BreakAfter="true">
    <mobile:Label id="Label1"  BreakAfter="true">
        Make: <%# Car.Make %></mobile:Label>
    <mobile:Label id="Label2"  BreakAfter="true">
        Model: <%# Car.Model %></mobile:Label>
    <mobile:Label id="Label3"  BreakAfter="true">
        Year: <%# Car.Year %></mobile:Label>
    <mobile:Label id="Label4"  BreakAfter="true">
        Color: <%# Car.Color %></mobile:Label>
</mobile:Panel>

Implantação de um controle de usuário

Depois de criar um controle de usuário para dispositivos móveis, você pode adicioná-lo para uma página da Web móvel do ASP.NET das seguintes maneiras:

  • Registrando-o na página e declarando-o na marcação.

  • Carregando programaticamente o controle na página.

Para registrar um controle de usuário, use o @ Register diretiva.Para carregar o controle programaticamente, use o LoadControl método.

O código de exemplo a seguir mostra como registrar e usar um controle personalizado declarativamente em uma página e como carregar um controle de usuário por meio de programação.

<%@ Page Language="VB" 
    Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile" 
    Namespace="System.Web.UI.MobileControls" 
    Assembly="System.Web.Mobile" %>
<%@ Register TagPrefix="carp" TagName="CarControl" 
    Src="~/CarControl.ascx" %>

<script >
    Protected Sub Page_Load( _
        ByVal sender As Object, ByVal e As EventArgs)
        ' Set the existing car control's data
        CarCtl.Car = New CarInfo("TreeCars", "Rooter", _
            2003, "Tan")

        ' Load a new car control and set the data
        Dim ccar As CarControl = _
            CType(Page.LoadControl("~/CarControl.ascx"), _
            CarControl)
        ccar.ID = "newCarCtl"
        ' Set the new car control's data
        ccar.Car = New CarInfo("TreeCars", "Climber", _
            2001, "Green")
        ' Add the new car control to form2.Controls
        form2.Controls.Add(ccar)

        ' Bind the data and the controls
        DataBind()
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
    <mobile:form id="form1" >
        <carp:CarControl ID="CarCtl"  /><br />
        <mobile:Link ID="Link1" Runat="server"
            href="#form2" Text="Next" />
    </mobile:form>
    <mobile:form ID="form2" Runat="server">
        <mobile:Link  id="Link2" 
            BreakAfter="true" 
            Text="Return" href="#form1" />
        <br />
    </mobile:form>
</body>
</html>
<%@ Page Language="C#" 
    Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile" 
    Namespace="System.Web.UI.MobileControls" 
    Assembly="System.Web.Mobile" %>
<%@ Register TagPrefix="carp" TagName="CarControl" 
    Src="CarControl.ascx" %>

<script >
    protected void Page_Load(
        object sender, EventArgs e)
    {
        // Set the existing car control's data
        CarCtl.Car = new CarInfo("TreeCars", "Rooter", 
            2003, "Tan");

        // Load a new car control and set the data
        CarControl ccar = 
            (CarControl)Page.LoadControl("~/CarControl.ascx");
        ccar.ID = "newCarCtl";
        // Set the new car control's data
        ccar.Car = new CarInfo("TreeCars", "Climber", 
            2001, "Green");
        // Add the new car control to form2.Controls
        form2.Controls.Add(ccar);

        // Bind the data and the controls
        DataBind();
    }

    // Toggles the visible form
    protected void Command_Click(
        object sender, EventArgs e)
    {
        if (this.ActiveForm == form1)
            this.ActiveForm = form2;
        else
            this.ActiveForm = form1;
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
    <mobile:form id="form1" >
        <carp:CarControl ID="CarCtl"  /><br />
        <mobile:Command ID="Command1" Runat="server" 
            OnClick="Command_Click">Next</mobile:Command>
    </mobile:form>
    <mobile:form ID="form2" Runat="server">
        <mobile:Command ID="Command2" Runat="server" 
            OnClick="Command_Click">Return</mobile:Command>
        <br />
    </mobile:form>
</body>
</html>

Resolver URLs

Quando você cria uma página que acessa um controle de usuário localizado em um diretório diferente, todas as URLs relativas em controle de usuário são resolvidas em relação ao diretório do controle de usuário, em vez de diretório da página.A seguir descreve um cenário típico:

  • O endereço da página é /padrão.aspx.

  • A página contém o controle de usuário subpasta / UserControl.ascx.

  • O controle de usuário por sua vez contém o controle de usuário B.ascx.

Neste cenário, B.ascx é resolvido sistema autônomo subpasta / B.ascx.Resolver URLs dessa maneira permite ao controle de usuário encapsular os links ou outros recursos relativos que podem exigir.

Resolver URLs a seguir em relação a um controle de usuário:

  • Quaisquer URLs de navegação — por exemplo, URLs para um Link controle.

  • Uma URL da imagem em um Image controle.

  • Um URL de ação para um Form controle.

Ao escrever controles ou adaptadores de controle, certifique-se de que você resolver URLs relativas onde for necessário.Nos controles e adaptadores, telefonar ResolveUrl método para resolver um URL relativo para o diretório que contém a página ou controle de usuário. Alguns métodos auxiliares nas classes de base de adaptador de chamam automaticamente o ResolveUrl método para resolver hiperlinks.

Uma exceção é quando você inclui um DeviceSpecific controle em um controle de usuário personalizada e o controle de usuário referencia filtros de dispositivo listados na <devicefilters> seção da Web. arquivo de configuração.Nesse caso, o controle usa o arquivo Web.config no diretório onde a página está localizada, não o arquivo Web.config localizado no subdiretório do controle.

Formatação e vinculando em controles de usuário e referências de forma

Você pode vincular a um formulário na mesma página usando uma URL que comece com um sinal numérico (#) seguido do ID do formulário.O exemplo de código a seguir usa o href propriedade das Link controle para especificar a URL.

<mobile:Link ID="Link1" Runat="server"
    href="#form2" Text="Next" />

Em um cenário típico, você tem um controle de usuário que é inserido em uma página no nível superior.A página e o controle de usuário podem conter um ou mais formulários.Controles na página e em cada controle de usuário podem fazer referência a formulários contidos em si, seguindo estas regras:

  • Quando um controle na página se refere a um formulário em um controle de usuário da criança, a URL deve incluir a ID exclusiva completo do formulário.O formato é ucid:formid, onde ucid é a ID do controle de usuário e formid é a ID do formulário.

  • Quando um controle dentro de um controle de usuário se refere a um formulário, o ASP.NET procurará primeiro o formulário no controle de usuário e, em seguida, no seu pai e assim por diante, todo o caminho para o nível de página.

Por exemplo, suponha que uma página contém dois formulários cujos IDs são FormA e FormB. A página também contém um controle de usuário de nível superior com o ID UserControl1. Esse controle de usuário contém duas formas adicionais cujas IDs são FormA e FormC. A tabela a seguir mostra exemplos de URLs possíveis e seu comportamento para esse cenário.

Local do controle

Formato URL

Comportamento

Na página

#FormA

Links para FormA na própria página.

Na página

#FormC

Lança uma exceção, pois a página não contém qualquer formulário com a ID especificada.(O controle de usuário tem como um formulário.)

Na página

#UserControl1:FormA

Links para FormA no controle de usuário.

No controle de usuário

#FormA

Links para FormA no controle de usuário, como ASP.NET primeiro procura no usuário controle propriamente dito.

No controle de usuário

#FormB

Links para FormB Na página, porque ASP.NET resolve a referência de formulário em relação a controle de usuário do pai.

Considerações especiais para criar controles de usuário móvel

Você deve considerar as questões a seguir ao desenvolver controles de usuário para o aplicativo móvel.

Trabalhando com estilos predefinidos

Para suporte de estilo totalmente funcional em controles de usuário, quando você criar controles de usuário móvel, você deve derivá-los do MobileUserControl classe em seu arquivo .ascx, em vez do padrão UserControl classe. Este exemplo de código a seguir mostra isso.

<%@ Control Language="C#"
    Inherits="System.Web.UI.MobileControls.MobileUserControl" 
    %>
<%@ Register TagPrefix="mobile" 
    Namespace="System.Web.UI.MobileControls" 
    Assembly="System.Web.Mobile" %>

Local do seu uso arquivo Web.config afeta

O ASP.NET usa o diretório da página que está em execução no momento para localizar informações de configuração para controles nessa página.Assim, se você tiver específicas de dispositivo filtros definidos em um arquivo Web.config, que arquivo Web.config devem estar localizados na raiz da seção páginas da Web móvel do seu aplicativo Web ASP.NET.Por exemplo, se você tiver uma página chamada /Reports/Report1.aspx inclui um controle de usuário chamado /Sales/Inventory.ascx e você também tem um /Sales/Web.arquivo de configuração que contenha filtros de dispositivo, o controle /Sales/Inventory.ascx procurará por dispositivo definições de filtro /Reports/Web.@@@ @, não o /Sales/Web.@@@ @.

Manipulação de texto literal em controles de usuário

Texto em um controle de usuário é analisado sistema autônomo uma LiteralControl e não sistema autônomo um LiteralText controle. Se o controle de usuário contém texto literal e, se o controle de usuário contém controles com a paginação interna, sistema autônomo Form, o texto aparece em todas sistema autônomo páginas. Para evitar esse problema, coloque o Sumário do controle de usuário em um Panel controle para que o texto seja analisado pela estrutura página ASP.NET e tratado sistema autônomo um LiteralText controle.

Consulte também

Referência

MobilePage

Outros recursos

Criando controles móveis personalizados