2013-12-19 4 views
21

У меня есть стандартный ввод:Добавить HTML5 замещающий текст в текстовом поле .net

<asp:TextBox type="text" runat="server" id="txtSearchTerm" /> 

я хотел бы, чтобы это сделать с динамическим HTML5 заполнителем. Что-то вроде:

'Code Behind 
txtSearchTerm.**placeholder** = "Search " + Site.Name 

Так что выводит следующий HTML:

<input type="text" runat="server" id="txtSearchTerm" 
placeholder="Search Site #1" /> 

где Site.Name = "Сайт # 1".

txtSearchTerm. placeholder не является собственностью. Я настроил его на текст, а затем запустил javascript, чтобы показать/скрыть в фокусе, но я бы скорее просто использовал значение placeholder HTML5. Как я могу это сделать?

Просьба не обращаться к JS/клиентской стороне.

+0

Смотрите также http://stackoverflow.com/questions/15823983/how -do-i-put-hint-in-a-asptextbox – goodeye

ответ

36

Вы можете использовать коллекцию Attributes. Таким образом, вы бы что-то вроде

txtSearchTerm.Attributes.Add("placeholder", "Search" + Site.Name); 

или

txtSearchTerm.Attributes["placeholder"] = "Search" + Site.Name; // or Attributes("placeholder") if you're using vb.net 

И если вы используете ресурсы для локализации/перевода:

txtSearchTerm.Attributes["placeholder"] = GetLocalResourceObject("YourLocalResourceName").ToString(); 
+0

О, большие объятия вам! Это то, что мне нужно. (Минус, в конце). Спасибо! – tiffylou

0

Существует также TextBoxWatermark расширитель включены в Ajax от Microsoft Инструментарий управления. Это не HTML5, но он обратно совместим (я считаю). http://www.asp.net/AjaxLibrary/AjaxControlToolkitSampleSite/TextBoxWatermark/TextBoxWatermark.aspx

<ajaxToolkit:TextBoxWatermarkExtender ID="TBWE2" runat="server" 
    TargetControlID="TextBox1" 
    WatermarkText="Type First Name Here" 
    WatermarkCssClass="watermarked" /> 
+1

Остерегайтесь здесь. OP не требовал от Javascript решений здесь, а инструментарий ajax в значительной степени зависит от Javascript. Посмотрев на это, вы правы, что он обратно совместим с помощью Javascript, но также не реализует заполнитель HTML5, если браузер поддерживает его. –

18

Потому что я считаю, это раздражает/утомительным, чтобы добавить все заполнители из кода позади. Вы можете создать новый класс TextBox, который наследует WebControls TextBox, а затем вы можете добавить placeholder из CodeBehind или со стороны HTML.

TextBox.cs (размещаемый в проекте/Управление /)

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); 
     } 
    } 
} 

управления Регистрация В Web.Config:

<system.web> 
    <pages> 
     <controls> 
     <add tagPrefix="ext" assembly="Project" namespace="Project.Controls" /> 
     </controls> 
    </pages> 
    </system.web> 

(используйте любой тег префикс вы хотите)

Использование:

<ext:TextBox runat="server" id="SomeId" PlaceHolder="This is a PlaceHolder" /> 

или из кода за

SomeId.PlaceHolder="This is a PlaceHolder"; 
+0

Из файла ASPX можно ли назначить PlaceHolder динамическим? Цель вопроса - динамический. –

+0

Уверен, что он может быть назначен динамически. Его можно использовать так же, как и любое другое свойство управления. У вас есть конкретный вариант использования? Может быть, я смогу помочь вам в этом. – Tony

9

Я просто положить замещающий недвижимость в HTML код и работает:

<asp:TextBox placeholder="hola mundo" ID="some_id" runat="server"/> 
+0

Это работает, но Visual Studio (2015 для меня) может отображать «placeholder» _Attribute «не является допустимым атрибутом сообщения« TextBox'_ »элемента в его ** списке ошибок **. – Theophilus

Смежные вопросы