2010-08-02 2 views
3

Vous savez comment les iDevices afficheront une disposition de clavier différente en fonction de la valeur HTML 5 de l'attribut type? Ainsi, <input type="email"... affichera la disposition du clavier électronique de l'iPad. J'utilise un. TextBox mais j'aimerais que les iDevices affichent la disposition de clavier appropriée pour le champ. Mais l'attribut type est remplacé par "text" lorsque le contrôle TextBox est rendu. Des idées?Disposition du clavier de l'e-mail iPhone avec asp .net TextBox

Répondre

6

Pas de solution facile, mais vous pouvez créer un nouveau contrôle comme:

public EnhancedTextBox : TextBox { 
    public Html5Type Html5Type { get; set; } 

    override AddAttributesToRender(HtmlTextWriter writer) { 
      // add attribute according to the selected type in the property 
      // something like 
      writer.AddAttribute("type", "email"); 
      base.AddAttributesToRender(writer); 
    } 
} 

et utiliser à la place d'une zone de texte normale

+0

C'est génial, mais je une question de suivi: une fois que j'ai créé ce cours, comment l'utiliser dans mon balisage? Y a-t-il un endroit spécifique dont j'ai besoin pour placer ce code afin que mon fichier .aspx reconnaisse cette nouvelle classe? – Andrew

+0

Essayez ceci, référencez l'assembly en haut via '<% @ Register Assembly =" ServerControl "TagPrefix =" mytag "Namespace =" ServerControl "%>' puis utilisez-le via ' ' –

+0

Est-ce que" ServerControl "est le texte que je devrais mettre ici, ou représente-t-il autre chose? Une erreur m'indique que le système ne trouve pas ce fichier. – Andrew

0

Il est également possible de mettre en œuvre pour le remplacer par "entrée < runat = 'serveur'/> "

Cependant, un problème de friandise est produite lorsque vous définissez l'entrée < runat 'serveur' = type = 'email' id = 'txtEmail'/> dans le fichier [...] .aspx à l'aide de Visual Studio 2010.

Lors de la création avec type = 'email', Visual Studio supprime une définition de variable d'instance - "protected global :: System.Web.UI.HtmlControls .HtmlInputText txtEmail; " dans le fichier [...]. aspx.designer.cs. Par conséquent, vous devez uniquement définir "< input runat = 'server' id = 'txtEmail'/>" dans [...]. Aspx. Au lieu d'ajouter l'attribut type = 'email' dans [...]. Aspx, vous pouvez fournir un attribut dans le code derrière le fichier comme suit,

txtEmail.Attributes.Add ("type", "email");

5

Il existe une mise à jour pour .NET Framework 4 qui vous permet de spécifier l'attribut type.

http://support.microsoft.com/kb/2468871.

Voir fonction 3 en bas la page

Feature 3 

New syntax lets you define a TextBox control that is HTML5 compatible. For example, the following code defines a TextBox control that is HTML5 compatible: 

<asp:TextBox runat="server" type="some-HTML5-type" /> 
2

Je viens de résoudre ce problème avec un adaptateur de commande pour < asp: TextBox >. Ajoutez cette classe quelque part dans votre projet et référencez-la à partir d'un fichier .browser dans App_Browsers. Elle vous permettra de définir le type que vous voulez pour votre contrôle d'entrée.

public class TextBoxControlAdapter : ControlAdapter 
{ 
    protected override void Render(HtmlTextWriter writer) { 
     var textBox = Control as WebControl; 
     if (textBox != null) { 
      var type = textBox.Attributes["type"]; 
      if (!String.IsNullOrEmpty(type)) { 
       writer.AddAttribute("type", type); 
      } 
     } 
     base.Render(writer); 
    } 
} 

Dans App_Browsers \ AdapterMappings.browser (par exemple), ajoutez ceci:

<adapter controlType="System.Web.UI.WebControls.TextBox" adapterType="MyProject.ControlAdapters.TextBoxControlAdapter" /> 
+0

Cela ajoute 'type =" email "' à la sortie rendue, mais il est toujours un autre attribut 'type' avec la valeur' "text" '. –

1

Il y a une solution plus. Malheureusement, tout ce qui précède nécessite un codage étendu, de nouvelles classes, l'installation de KB qui ne se met pas à jour pour l'iPhone OS 3+.

Utilisez cette option si vous souhaitez que votre téléphone pour afficher un clavier numérique pour un contrôle de zone de texte dans ASP.NET: pattern = « [0-9] * »

<asp:textbox runat="server" id="txtNumber" pattern="[0-9]*" /> 
+0

Excellent - ne nécessite aucun codage et fonctionne sur asp.net framework v2.0. – GlennG

+0

Hélas, seul un iPhone analyse le motif et restitue un clavier numérique: Android ne le fait pas. Devrait également être utilisé conjointement avec l'attribut title; mais encore une fois, ce n'est pas pris en charge sur les appareils tactiles. – GlennG

Questions connexes