Lorsqu'un ASP.NET TextBox est rendu, il produit:
<input type="text" />
Cependant, j'ai besoin que le rendu soit un type de numéro HTML5, comme:
<input type="number" />
Est-ce possible?
J'avais les mêmes exigences pour un site Web mobile utilisant ASP.NET. Après avoir trouvé aucune bonne solution, j'ai simplement essayé de définir type="number"
directement sur la zone de texte. À ma surprise, il a fonctionné! Incroyable, j'ai créé un projet de test simple à vérifier. J'ai couru cette ligne de code dans chaque version .NET:
<!-- this HTML tested in each .NET version -->
<asp:TextBox runat="server" type="number" />
Voici les résultats:
<!-- ASP.NET 2.0, 3.0, and 3.5 -->
<input name="ctl01" type="text" type="number" />
<!-- ASP.NET 4.0 and 4.5 -->
<input name="ctl01" type="number" />
Ligne de fond: si vous utilisez ASP.NET 4.0 ou plus récent, ajoutez simplement type="number"
à votre zone de texte.
Remplacer le contrôle de la zone de texte de base
public class HTML5TextBox : TextBox
{
.....
protected override void Render(HtmlTextWriter writer)
{
//Sth like the code below, you need do some research though
writer.AddAttribute(HtmlTextWriterAttribute.Type,"Number");
writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID + "_displayTXT");
writer.AddAttribute(HtmlTextWriterAttribute.Name,this.UniqueID + "t1");
writer.AddAttribute(HtmlTextWriterAttribute.Value,base.Text);
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag();
}
....
}
Ou vous pouvez vérifier celui que je viens de trouver à http://www.codeproject.com/Articles/68834/Enhanced-Textbox-Control
La propriété TextMode
est utilisée pour cela, par exemple.
<asp:TextBox ID="uPhone" CssClass="formEntry" TextMode="Phone" ClientIDMode="Static" runat="server"></asp:TextBox>
pourrait être rendu comme
<input name="ctl00$ContentPlaceHolder1$uPhone" id="uPhone" class="formEntry" type="tel">
Les modes texte en plus de [MultiLine | Mot de passe | SingleLine] ont été introduits quelque temps après VS2010 - la documentation ne me dit pas rapidement quand.
J'ai été capable de faire cela avec un contrôle créé dynamiquement comme ceci:
TextBox control = new TextBox();
control.Attributes.Add("Type", "number");
vous devez créer un nouveau contrôle héritant de TextBox
et redéfinir le rendu, ou vous pouvez générer un extrait de code javascript pour le modifier ultérieurement.
Vous pouvez utiliser les membres du Enum TextBoxMode
<asp:TextBox ID="MyAwesomeId" runat="server" TextMode="Number"></asp:TextBox>
Ce rendu
<input type="number" value="5" id="MainContent_MyAwesomeId" c>
l'énumération complète est
public enum TextBoxMode
{
SingleLine = 0,
MultiLine = 1,
Password = 2,
Color = 3,
Date = 4,
DateTime = 5,
DateTimeLocal = 6,
Email = 7,
Month = 8
Number = 9,
Range = 10,
Search = 11,
Phone = 12,
Time = 13,
Url = 14,
Week = 15
}
définir type="number"
dans <asp:textbox type="number" runat="server">
peu importe que cela n'apparaisse pas dans la liste, cela fonctionne