Почему XhtmlTextWriter игнорирует пользовательские атрибуты?

1

Я нашел какое-то странное поведение, и мне было интересно, может ли кто-нибудь помочь здесь.

Я создаю форму, используя класс 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?

Теги:
htmltextwriter

1 ответ

3
Лучший ответ

Это связано с тем, что вы используете XhtmlTextWriter, который является строгим с его атрибутами и не будет записывать непризнанные (из-за необходимости создания допустимого XHTML). У вас есть два варианта.

Один: вместо этого используйте HtmlTextWriter:

HtmlTextWriter html = new HtmlTextWriter(sw);

Два: если по XhtmlTextWriter то причине вам нужно использовать XhtmlTextWriter, вы можете добавить placeholder как признанный атрибут для input элементов, прежде чем добавлять атрибут к элементу:

html.AddRecognizedAttribute("input", "placeholder");
  • 0
    Ага, это звучит разумно. Я бы хотел соответствовать HTML5. MSDN говорит на странице XhtmlTextWriter, что «HtmlTextWriter выводит XHTML, если вы не настроите ASP.NET специально, чтобы не отображать разметку XHTML», поэтому я склоняюсь к вашему первому решению. Чтобы вы посоветовали? (Я проверю свой код завтра, тогда вы получите свою галочку)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню