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.