Я нашел какое-то странное поведение, и мне было интересно, может ли кто-нибудь помочь здесь.
Я создаю форму, используя класс XhtmlTextWriter, который наследует методы addAttribute. Я создаю тег input
которому нужен хороший (HTML5) атрибут placeholder. Метод addAttribute
имеет два параметра: имя атрибута и значение. Имя атрибута может быть выбрано из перечисления HtmlTextWriteAttribute
или введено вручную в виде строки. Поскольку "placeholder" недоступен в перечислении, я использовал следующий код:
StringWriter sw = new StringWriter();
XhtmlTextWriter html = new XhtmlTextWriter(sw);
html.AddAttribute(HtmlTextWriterAttribute.Type, "text");
html.AddAttribute(HtmlTextWriterAttribute.Name, "firstname");
html.AddAttribute("placeholder", "First Name");
html.AddAttribute("maxlength", "25");
html.RenderBeginTag(HtmlTextWriterTag.Input);
html.RenderEndTag();//input
return sw.ToString();
Это красиво создает атрибуты element & attributes... EXCEPT для placeholder:
<input type="text" name="firstname" maxlength="25"></input>
Кто-нибудь знает, где мой заполнитель? (Как вы можете видеть с maxlength
, использование строки для имени атрибута работает...)
Примечание: Это действительно работает, но это не так красиво:
html.WriteBeginTag("input");
html.WriteAttribute("type", "text");
html.WriteAttribute("placeholder", "First Name");
html.Write(HtmlTextWriter.SelfClosingTagEnd);
//Обновление: та же проблема с required
атрибутом... Может ли это быть чем-то специфичным для HTML5?
Это связано с тем, что вы используете XhtmlTextWriter
, который является строгим с его атрибутами и не будет записывать непризнанные (из-за необходимости создания допустимого XHTML). У вас есть два варианта.
Один: вместо этого используйте HtmlTextWriter
:
HtmlTextWriter html = new HtmlTextWriter(sw);
Два: если по XhtmlTextWriter
то причине вам нужно использовать XhtmlTextWriter
, вы можете добавить placeholder
как признанный атрибут для input
элементов, прежде чем добавлять атрибут к элементу:
html.AddRecognizedAttribute("input", "placeholder");