J'ai une entrée standard:
<asp:TextBox type="text" runat="server" id="txtSearchTerm" />
Je voudrais avoir ce rendu avec un espace dynamique HTML5 . Quelque chose comme:
'Code Behind
txtSearchTerm.**placeholder** = "Search " + Site.Name
Pour qu'il génère le code HTML suivant:
<input type="text" runat="server" id="txtSearchTerm"
placeholder="Search Site #1" />
où Site.Name = "Site # 1".
txtSearchTerm. espace réservé n'est pas une propriété. Je l’ai réglé sur texte, puis javascript pour afficher/masquer le focus, MAIS je préférerais de loin utiliser la valeur d’espace réservé HTML5. Comment puis-je rendre cela?
S'il vous plaît pas de solutions côté client/JS.
Vous pouvez utiliser la collection Attributes
. Donc, vous auriez quelque chose comme
txtSearchTerm.Attributes.Add("placeholder", "Search" + Site.Name);
ou
txtSearchTerm.Attributes["placeholder"] = "Search" + Site.Name; // or Attributes("placeholder") if you're using vb.net
Et si vous utilisez des ressources pour la localisation/traduction:
txtSearchTerm.Attributes["placeholder"] = GetLocalResourceObject("YourLocalResourceName").ToString();
Parce que je trouve ennuyeux/fastidieux d’ajouter tous les espaces réservés du code derrière. Vous pouvez créer une nouvelle classe TextBox qui hérite de la zone de texte WebControls, puis vous pouvez ajouter un espace réservé à partir de CodeBehind ou de HTML.
TextBox.cs (placé dans Project/Controls /)
namespace Project.Controls
{
public class TextBox : System.Web.UI.WebControls.TextBox
{
public string PlaceHolder { get; set; }
protected override void OnLoad(EventArgs e)
{
if(!string.IsNullOrWhiteSpace(PlaceHolder))
this.Attributes.Add("placeholder", PlaceHolder);
base.OnLoad(e);
}
}
}
Enregistrer le contrôle Dans le Web.Config:
<system.web>
<pages>
<controls>
<add tagPrefix="ext" Assembly="Project" namespace="Project.Controls" />
</controls>
</pages>
</system.web>
(utilisez le préfixe de balise que vous voulez)
Utilisation:
<ext:TextBox runat="server" id="SomeId" PlaceHolder="This is a PlaceHolder" />
ou du code derrière
SomeId.PlaceHolder="This is a PlaceHolder";
Je viens de mettre la propriété placeholder dans le code HTML et travaille:
<asp:TextBox placeholder="hola mundo" ID="some_id" runat="server"/>
Il existe également une extension TextBoxWatermark incluse dans la boîte à outils Ajax Control de Microsoft. Ce n'est pas HTML5, mais c'est rétrocompatible (je crois) . http://www.asp.net/AjaxLibrary/AjaxControlToolkitSampleSite/TextBoxWatermark/TextBoxWatermark.aspx
<ajaxToolkit:TextBoxWatermarkExtender ID="TBWE2" runat="server"
TargetControlID="TextBox1"
WatermarkText="Type First Name Here"
WatermarkCssClass="watermarked" />